和C预处理器中的按位运算符

时间:2013-03-12 03:12:23

标签: c c-preprocessor

当我尝试以下代码时:

#if 11 & 10 == 10
#endif

表达式的评估是正确的,但是当我将其更改为以下内容时:

#if 10 & 10 == 10
#endif

评估返回false,同时基于&的定义。运算符它应该仍然返回true(当我尝试使用正确的预处理器时)。 通常,无论我在尝试哪个在第一个操作数中都有0,返回false忽略结果是什么。

有谁知道问题是什么?

2 个答案:

答案 0 :(得分:7)

Order of operation似乎是罪魁祸首,因为在==之前评估了&。括号为我工作:

#if (10 & 10) == 10

答案 1 :(得分:5)

==的优先级高于&

if 11 & 10 == 10评估为if 11 & 1评估为if 1

if 10 & 10 == 10评估为if 10 & 1评估为if 0