使用visual studio 2010无法直接计算这个简单的计算
std::cout<<(1 | 1 & 2);
//gives the value 1, was expecting 2 since 1 | 1 = 2 , the & 2 gives 2
std::cout<<( (1 | 1) & 2);
//gives the value 0, why is this different from above?
答案 0 :(得分:4)
第一种情况:
1&amp; 2 //因为&
的优先级高于|
01
&10
----
00
和OR结果为1,
1
OR 0
-----
1
在第二种情况下
1 | 1
01
OR 01
----
01
和AND结果为2,
01
& 10
-----
0
答案 1 :(得分:2)
这只是因为&
运算符的优先级高于|
运算符所以
1 | 1 & 2
评估为
1 | (1 & 2)
所以
1 & 2 = 0
和
1 | 0 = 1
因此你的答案。
答案 2 :(得分:1)
1 | 1
是1.为什么你认为它应该是2?
1 & 2
是01&amp; 10为二进制,即00 - 因此得到零。
答案 3 :(得分:1)
这里发生了两件事:
按位AND(&
)具有比按位OR(|
)更高的优先级(即,首先被有效评估)。
1 | 1
为1
,而不是2
。
答案 4 :(得分:0)
1 | 1给出1 x | x总是会给你x
1 | &安培; 2相当于1 | (1&amp; 2)
因为&amp;就像* for + http://en.wikipedia.org/wiki/Operators_in_C_and_C%2B%2B#Operator_precedence
P.S。这是一个在线计算器 http://www.miniwebtool.com/bitwise-calculator/?data_type=10&number1=1&number2=1&operator=OR