Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/60.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C |运算符对| |运算符_C_Operators - Fatal编程技术网

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希望我能不止一次地投票支持这一点。非常重要的一点!