|运算符与||操作者

时间:2010-09-05 03:54:41

标签: c operators

简单的问题但是|运算符与||(或)运算符相比有什么作用?

5 个答案:

答案 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)之类的东西时,您只想使用||但是当你做的事情就像把旗帜作为变量一样使用时。 (如果你不知道你可能根本不需要什么)