简单的问题,但与||
(或)运算符相比,|
运算符做什么?|算子与||运算符
回答
|
是一个位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
这看起来可能会让人困惑,但最终你会得到它的窍门。 Bitwise OR
主要用于在位域上设置标志的情况。也就是说,一个值将一组相关条件的开/关状态保存在单个值(通常是32位数字)中。在Win32中,窗口样式值是位字段的一个很好的例子,每个样式都由一个位(或标志)表示,如WS_CAPTION,它指示窗口是否有标题栏。
|
是bitwise or运营商。维基百科页面Operators in C and C++很好地描述了所有的操作员。
单词中有几个(通常是32,16,8或64)位。按位OR(一个垂直条)为该位位置中的每个位置返回逻辑或。逻辑OR(两个垂直条)只返回TRUE或FALSE。
该||是一个逻辑或和|是一个按位或。大多数情况下,当你检查if(i == 0 || i == 1)时,你只是想使用||但是当你正在做象传递标志这样的变量时使用|。 (如果你不知道那是什么,你可能不需要|在所有)
正如其他人提及的,|
是按位 OR运算并||
是逻辑 OR运算符,以及它们在概念上不同的操作上不同种类的输入,(通常)操作。但是,这可能会引发另一个问题:如果您将|
与布尔操作数一起使用,那么它会不会与||
做同样的事情,因为一切最终都会归结为位?是否需要独特的||
操作员?
除了概念上的差异,另一个重要的区别是||
是短路。这意味着如果第一个操作数为真,则第二个操作数根本就不被计算。例如:
int flag = Foo() || Bar();
将调用Bar()
只有Foo()
返回0。如果|
使用,两个操作数总是会进行评估。
(而且,当然,&
和&&
有类似的行为。)
- 1. ||运算符与=运算符相同吗?
- 2. 定时运算符+,运算符,运算符*和运算符/
- 3. 与运算符或
- 4. 与Like运算符
- 5. C++运算符()括号 - 运算符类型()与类型运算符()
- 6. 逻辑与运算符与
- 7. 麻烦与算术运算符在AngularJS
- 8. 与作为算术运算符在PHP
- 9. Versant OQL声明与算术运算符
- 10. 算术运算符
- 11. 运算符重载“运算符T *()”产生比较运算符?
- 12. MUL运算符与NASM中的IMUL运算符
- 13. 标准SQL布尔运算符IS与等于(=)运算符
- 14. Javascript:使用逻辑运算符与比较运算符
- 15. Javascript中的OR运算符(|)与parseInt的运算符相同吗?
- 16. 奇怪的运算符优先级与?? (空合并运算符)
- 17. 问题与运算符==
- 18. SQL Charindex与LIKE运算符
- 19. 与*运算符的解释
- 20. 运算符与C#动态?
- 21. 与布尔运算符
- 22. XQuery!=运算符与序列
- 23. 与布尔运算符
- 24. 问题与== ==运算符
- 25. 与布尔运算符
- 26. LIKE运算符与$变量
- 27. 运算符=不与fstream的
- 28. Ruby比较运算符? ==与===
- 29. 与&运算符匹配
- 30. - vs - =运算符与numpy
+1希望我能够投票这件事不止一次。非常重要的一点! – 2011-05-01 20:21:52