我正在阅读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
答案 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));