什么| =在C中意味着什么?

时间:2013-07-23 14:04:24

标签: c gcc

我正在阅读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

5 个答案:

答案 0 :(得分:9)

就地按位OR x |= y大致等同于编写x = x | y,但LHS未评估两次。

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

flags |= FLAG_X; // add flag x
flags |= FLAG_Y; // add flag y
flags &= ~FLAG_Z; // remove flag z

答案 1 :(得分:5)

这是...的简写符号。

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

答案 2 :(得分:5)

此运算符(C中的按位OR运算符)有助于Bit masking

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

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

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

答案 3 :(得分:4)

这只是一个简写:

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

答案 4 :(得分:3)

这是按位或赋值运算符。在你的情况下,它几乎相当于:

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