简单的问题但是|
运算符与||
(或)运算符相比有什么作用?
答案 0 :(得分:11)
|
是一个按位OR
运算符,其中||
是一个逻辑OR
运算符。也就是说,前者用于将两个数值中的位“组合”为一个联合,而后一个用于运算符左侧或右侧的条件为真时计算结果为真。
具体而言,按位运算符(不与逻辑运算符混淆)对数字的每个位(在相同的序号位置)进行操作,并相应地计算结果。在按位OR
的情况下,如果任一位为1,则结果位为1;如果两个位均为0,则结果为0。例如,1 | 2 = 3,因为:
1 = 0001
2 = 0010
--------
0011 = 3
此外,2 | 3 = 3,因为:
2 = 0010
3 = 0011
--------
0011 = 3
起初这看起来很混乱,但最终你会对此感到困惑。按位OR
主要用于在位字段上设置标志的情况。也就是说,保持单个值(通常是32位数)中的一组相关条件的开/关状态的值。在Win32中,窗口样式值是位字段的一个很好的示例,其中每个样式由单个位(或标志)表示,如WS_CAPTION,它指示窗口是否具有标题栏。
答案 1 :(得分:3)
一个字中有几个(通常是32,16,8或64)位。按位OR(一个垂直条)返回该位位置中每个位位置的逻辑OR。逻辑OR(两个垂直条)仅返回TRUE或FALSE。
答案 2 :(得分:2)
|
是bitwise or运算符。维基百科页面Operators in C and C++很好地描述了所有运营商。
答案 3 :(得分:2)
正如其他人所提到的,|
是按位 OR运算符,||
是逻辑 OR运算符,它们在概念上是不同的运算(通常)操作不同类型的输入。但这可能会引发另一个问题:如果你将|
与布尔操作数一起使用,那么它与||
不会做同样的事情,因为无论如何最终归结为比特?是否需要一个独特的||
运算符?
除了概念差异之外,另一个重要区别是||
短路。这意味着如果第一个操作数为true,则根本不评估第二个操作数。例如:
int flag = Foo() || Bar();
仅当Bar()
返回0时,才会调用Foo()
。如果使用|
,则始终会评估两个操作数。
(当然,&
和&&
也有类似的行为。)
答案 4 :(得分:0)
||是逻辑或和|是一个按位或。大多数情况下,当您检查if(i == 0 || i == 1)之类的东西时,您只想使用||但是当你做的事情就像把旗帜作为变量一样使用时。 (如果你不知道你可能根本不需要什么)