2014-01-06 118 views
-1

我使用的termcap,我不明白是什麼意思&=在這個例子中:&=是什麼意思?

term.c_lflag &= ~(ICANON); 

誰能給我解釋一下這是如何工作?

+4

'term.c_lflag =(term.c_lflag)&(〜(ICANON))' – sujin

+0

就像'+ ='等 –

+2

語義含義是關閉ICANON標誌,從而保留規範輸入模式。 (一旦設置了新的'c_lflag'值。) –

回答

1
term.c_lflag = (term.c_lflag) & (~ICANON) 
1

它與運營商+=沒有多大區別。就像它term.c_lflag &= ~(ICANON);應該有term.c_lflag = term.c_lflag & (~ICANON);的效果,但「就地」。您不會創建臨時文件,而是您將修改term.c_lflag。請注意,這裏是&是按位AND運算符。

2

&=表示Bit Wise AND然後分配。例如

term.c_lflag = (term.c_lflag) & (~(ICANON)) 

首先,做噸erm.c_lflag & ~(ICANON)然後分配到term.c_lflag

0

代碼關閉ICANON位,如在施瓦茨評論解釋:所述ICANON通過掩模,例如定義了一個位0x8000(ICANON位是值爲1的那個),當您應用位運算符not運算符~時,所有位都「反轉」,並且您有(如果值爲16位寬)0x7FFF。如果將這個值與x進行按位and&)的比較,結果是保持x的所有位與掩碼0x7FFF中的「1」位匹配,並且將匹配「0」位的x的位「關閉」在掩碼中,這正是這個特定情況下的ICANON位。

關於x &= a,正如已經解釋過的,它可以被認爲只是語法糖x = x & a

2

這是一個常用的方法,在表示位域的整數中將特定位設置爲0。

unsigned a = ...; 
// ... 
unsigned int mask = 1 << 11; // mask for 12th bit 
a |= mask; // set 12th bit to 1 
a &= ~mask; // set 12th bit to 0 

啓用由bitwise- or位工作荷蘭國際集團與面具,看起來像000010000一個數字。
禁用位按位運算 - and用掩碼如111101111(因此需要~,表示按位否定)掩碼。

注意,也有其他的選擇來管理位地址:,

    用C
  • ++,使用std::bitset或C或C++甚至std::vector<bool>
  • 使用位域結構像

    struct Foo { 
        int foo_enabled : 1; 
        int bar_enabled : 1; 
        // ... 
    };