AND和OR运算符c

时间:2018-01-21 06:21:53

标签: c if-statement operator-precedence

嘿,我正在处理一个代码,如果条件是这样,我就陷入其中    (为了更好地理解,不是简化的实际代码)

if(18&2==2)
do something;

如果条件没有执行但如果我这样写

if(18|2==18)
do something;

它执行正常

也是我,

printf("%d",18&2);

它给了2现在我很困惑为什么上面的if语句没有执行, 是因为优先,请解释谢谢。

2 个答案:

答案 0 :(得分:6)

你的是precedence"错误"。逐位运算符的优先级低于相等性。将18 & 2 == 2变为18 & (2 == 2),即18 & 1。最后一个显然评估为0,因为18可以被2整除。

在这种情况下,当你得到奇怪的结果"。首先添加括号以确保每个操作符都对您期望的操作数进行操作。

答案 1 :(得分:2)

==的优先级高于&。 表达式:

if(18&2==2)

评估如下:

2==2会产生逻辑true1)。

18&1会产生逻辑false0);

因此if条件(18&2==2)评估为false