C |运算符对| |运算符
简单的问题,但是与C |运算符对| |运算符,c,operators,C,Operators,简单的问题,但是与|操作符相对的|(或)操作符做什么?是操作符。wikipedia页面对所有操作符都进行了很好的描述。一个单词中有几个(通常是32、16、8或64)位。按位OR(一个垂直条)返回该位位置中每个位位置的逻辑OR。逻辑OR(两个垂直条)仅返回TRUE或FALSE。逻辑OR和位OR。大多数情况下,当您检查if(i==0 | | i==1)时,您只想使用| |;但当您执行诸如将标志作为变量传递之类的操作时,请使用|。(如果你不知道那是什么,你可能根本不需要)是一个按位或运算符,其中as|
|
操作符相对的|
(或)操作符做什么?
是操作符。wikipedia页面对所有操作符都进行了很好的描述。一个单词中有几个(通常是32、16、8或64)位。按位OR(一个垂直条)返回该位位置中每个位位置的逻辑OR。逻辑OR(两个垂直条)仅返回TRUE或FALSE。逻辑OR和位OR。大多数情况下,当您检查if(i==0 | | i==1)时,您只想使用| |;但当您执行诸如将标志作为变量传递之类的操作时,请使用|。(如果你不知道那是什么,你可能根本不需要)
是一个按位或
运算符,其中as|
是一个逻辑或
运算符。即,前者用于将两个数值中的位“组合”为并集,而如果运算符左侧或右侧的任一条件为真,则后者的计算结果为真
具体而言,按位运算符(不与逻辑运算符混淆)对数字的每一位(在相同的顺序位置)进行运算,并相应地计算结果。在按位或
的情况下,如果任意一位为1,则结果位为1,只有当两位均为0时,结果位才为0。例如,1 | 2=3,因为:
1 = 0001
2 = 0010
--------
0011 = 3
2 = 0010
3 = 0011
--------
0011 = 3
此外,2 | 3=3,因为:
1 = 0001
2 = 0010
--------
0011 = 3
2 = 0010
3 = 0011
--------
0011 = 3
这一点一开始似乎令人困惑,但最终你会掌握窍门。按位
或
通常用于在位字段上设置标志。即,在单个值(通常为32位数字)中保持一组相关条件的开/关状态的值。在Win32中,窗口样式值是位字段的一个很好的示例,其中每个样式由单个位(或标志)表示,如WS|U标题,它指示窗口是否有标题栏。如其他人所述,
是按位or运算符,|
是逻辑or运算符,它们在概念上是不同的操作,通常对不同类型的输入进行操作。但这可能会引发另一个问题:如果您将|
与布尔操作数一起使用,那么这不会与|
做同样的事情,因为所有内容最终都归结为位吗?是否需要一个独特的|
操作符
除了概念上的差异外,另一个重要的差异是短路。这意味着,如果第一个操作数为true,则根本不计算第二个操作数。例如:
int flag = Foo() || Bar();
仅当Foo()
返回0时才会调用Bar()。如果使用了|
,则始终会计算两个操作数
(当然,&
和&
也有类似的行为。)+1希望我能不止一次地投票支持这一点。非常重要的一点!