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
。
嘿,我正在编写代码,但我卡在了这个 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
。