Har*_*esh 7 c evaluation operator-precedence
为什么以下声明:
int a = 10;
a&8 == 8;
Run Code Online (Sandbox Code Playgroud)
return false(0)?
我知道它==有更多的优先权&,但它仍然应该检查8 == 8它是否应该评估为真,但它的评估为假.
任何人都可以通过推理帮助我.
pho*_*xis 23
a & 8 == 8是a & (8 == 8)因为==优先级高于&(这里)
所以8 == 8是1和a = 10是1010二进制
所以
00000001
& 00001010
--------
00000000
Run Code Online (Sandbox Code Playgroud)
有趣的事实:虽然false是零,而C语言中的任何非零值都是true.但是,如果相等运算符的计算结果为true,则保证评估值1和0其他值.推荐人C99第6.5.9节第3段
8 == 8转换为的结果int是1.
a & 8 == 8因此变为a & 1,如果设置了最低有效位,则为真a.这只是a奇怪的.
由于a是10,那么a & 1就是0,因为10是偶数.
在&这种情况下是按位和,而不是逻辑和.逻辑 - 并且会导致表达式a && 8 == 8为真,因为&&运算符的两边都不为零.
但是,按位 - 并产生一个结果,"当且仅当转换后的操作数中的每个相应位都置位时,结果中的每个位都被置位"(C.11§6.5.104).对于偶数,1s位是0,所以bitwise-with的结果1是0.
由于bitwise-is的结果0,表达式被视为false.
| 归档时间: |
|
| 查看次数: |
292 次 |
| 最近记录: |