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

Vin*_*982 -1 c gcc

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

unsigned long attrs = (1UL - 1UL);   //Setting to zero
Run Code Online (Sandbox Code Playgroud)

但是以下行做了什么:

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

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

4194304
4718592
Run Code Online (Sandbox Code Playgroud)

nne*_*neo 9

它是就地按位OR.除了LHS没有被评估两次之外,x |= y它大部分相当于写作x = x | y.

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

flags |= FLAG_X; // add flag x
flags |= FLAG_Y; // add flag y
flags &= ~FLAG_Z; // remove flag z
Run Code Online (Sandbox Code Playgroud)


vid*_*dit 5

它是...的简写符号

attrs = attrs | ((1UL) << ((14) + 8));
Run Code Online (Sandbox Code Playgroud)


Day*_*rai 5

此运算符(C中的按位OR运算符)有助于位屏蔽.

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

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

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

  • 请解释downvote (4认同)