在C预处理器中的位运算符

5
当我尝试以下代码时:
#if 11 & 10 == 10
#endif

表达式的评估为真,但当我将其更改为以下内容时:
#if 10 & 10 == 10
#endif

评估返回false,而根据&操作符的定义,它仍应该返回true(当我尝试使用预处理器时是正确的)。 通常情况下,无论结果如何,第一个操作数为0的任何操作都将返回false。 有人知道问题出在哪里吗?
2个回答

7

运算顺序似乎是罪魁祸首,因为==&之前被计算。对我来说,圆括号起到了作用:

#if (10 & 10) == 10

5

==的优先级高于&

if 11 & 10 == 10的结果为if 11 & 1的结果为if 1

if 10 & 10 == 10的结果为if 10 & 1的结果为if 0


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接