2014-01-06 383 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; 
        // ... 
    };