C中的这个操作是什么?

alb*_*ttx -6 c binary termcap

我开始使用termcaps,我看到了这种操作.

term.c_lflag &= ~(ICANON);

我知道&=是一个binary AND,我不是很舒服.

为什么不简单地使用=或制作一个#define,又&= ~做什么?

unw*_*ind 5

假设ICANON是一个位掩码,即一个位设置为表示某个特征的整数,该语句将确保设置这些位c_lflag.

这通常被称为"屏蔽"这些位.

该操作是按位反转(~按位反转)的按位AND .

因此,如果在操作之前值为c_lflag3(二进制11 2),并且ICANON值为2(二进制10 2),则它将变为1,因为它是按位-AND:ed,~2其中所有位都设置为除了位数以外的值1(二进制... 11101 2).

它也可以更详细地写成

term.c_lflag = term.c_lflag & ~ICANON;
Run Code Online (Sandbox Code Playgroud)

ICANON不应该需要括号.