0

我正在阅读 NCURSES 的源代码,并在函数中发现以下内容:

unsigned long attrs = (1UL - 1UL);   //Setting to zero

但是以下行做了什么:

attrs |= ((1UL) << ((14) + 8));
printf("%d \n", attrs);
attrs |= ((1UL) << ((11) + 8));
printf("%d \n", attrs);

当我输出结果时,它给出了答案输出:

4194304
4718592
4

5 回答 5

11

它是就地按位 ORx |= y基本上等同于 writing x = x | y,除了 LHS 没有被评估两次。

它通常用于向变量添加位标志:

flags |= FLAG_X; // add flag x
flags |= FLAG_Y; // add flag y
flags &= ~FLAG_Z; // remove flag z
于 2013-07-23T14:06:19.567 回答
6

此运算符(C 中的按位 OR 运算符)有助于位掩码

attrs |= ((1UL) << ((14) + 8));

或者,等效地,您可以这样设置:

attrs = attrs | ((1UL) << ((14) + 8));

于 2013-07-23T14:07:32.603 回答
5

它是..的简写符号

attrs = attrs | ((1UL) << ((14) + 8));
于 2013-07-23T14:06:02.597 回答
4

它只是一个简写形式:

attrs = attrs | ((1UL) << ((14) + 8));
于 2013-07-23T14:06:17.067 回答
3

这就是按位或赋值运算符。在您的情况下,它几乎等同于:

attrs = attrs | ((1UL) << ((14) + 8));
于 2013-07-23T14:06:26.990 回答