AND 和 OR 运算符 c

AND and OR operator c

嘿,我正在编写代码,但我卡在了这个 if 条件中 (不是为了更好理解而简化的实际代码)

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

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

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

执行正常

我也是,

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

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

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

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

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

if(18&2==2)

评价如下:

2==2 结果合乎逻辑 true (1).

18&1 结果符合逻辑 false (0);

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