嘿,我正在处理一个代码,如果条件是这样,我就陷入其中 (为了更好地理解,不是简化的实际代码)
if(18&2==2)
do something;
如果条件没有执行但如果我这样写
if(18|2==18)
do something;
它执行正常
也是我,
printf("%d",18&2);
它给了2现在我很困惑为什么上面的if语句没有执行, 是因为优先,请解释谢谢。
答案 0 :(得分:6)
你的是precedence"错误"。逐位运算符的优先级低于相等性。将18 & 2 == 2
变为18 & (2 == 2)
,即18 & 1
。最后一个显然评估为0,因为18可以被2整除。
在这种情况下,当你得到奇怪的结果"。首先添加括号以确保每个操作符都对您期望的操作数进行操作。
答案 1 :(得分:2)
==
的优先级高于&
。
表达式:
if(18&2==2)
评估如下:
2==2
会产生逻辑true
(1
)。
18&1
会产生逻辑false
(0
);
因此if
条件(18&2==2)
评估为false
。