我正在阅读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)
它是就地按位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)
| 归档时间: |
|
| 查看次数: |
2300 次 |
| 最近记录: |