AND和OR运算符c

kan*_*war 1 c if-statement operator-precedence

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

if(18&2==2)
do something;
Run Code Online (Sandbox Code Playgroud)

如果条件不执行但如果我这样写

if(18|2==18)
do something;
Run Code Online (Sandbox Code Playgroud)

它执行正常

当我,

printf("%d",18&2);
Run Code Online (Sandbox Code Playgroud)

它现在让我很困惑为什么上面的if语句不执行,是因为优先,请解释谢谢.

Sto*_*ica 6

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

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