我开始使用termcaps,我看到了这种操作.
term.c_lflag &= ~(ICANON);
我知道&=
是一个binary AND
,我不是很舒服.
为什么不简单地使用=
或制作一个#define
,又&= ~
做什么?
假设ICANON
是一个位掩码,即一个位设置为表示某个特征的整数,该语句将确保未设置这些位c_lflag
.
这通常被称为"屏蔽"这些位.
该操作是按位反转(~
按位反转)的按位AND .
因此,如果在操作之前值为c_lflag
3(二进制11 2),并且ICANON
值为2(二进制10 2),则它将变为1,因为它是按位-AND:ed,~2
其中所有位都设置为除了位数以外的值1(二进制... 11101 2).
它也可以更详细地写成
term.c_lflag = term.c_lflag & ~ICANON;
ICANON
不应该需要括号.