为什么会出现下面的语句:
int a = 10;
a&8 == 8;
返回假 (0) ?
我知道 ==
比 &
有更高的优先级,但它仍然应该检查 8 == 8
是否应该计算true,但其评估为 false。
任何人都可以通过推理帮助我。
最佳答案
a & 8 == 8
是 a & (8 == 8)
因为 ==
的优先级高于 &
( here )
所以 8 == 8
是 1
而 a = 10
是二进制的 1010
所以
00000001
& 00001010
--------
00000000
有趣的事实:
虽然在 C 语言中 false 是一个零而 true 是任何非零值。但是,如果相等运算符的计算结果为真,它保证计算结果为 1
,否则为 0
。 Referrer C99 Section 6.5.9 Paragraph 3
关于评估 == 和 & 时的困惑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18075367/