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

C预处理器中的and和位运算符,c,c-preprocessor,C,C Preprocessor,当我尝试以下代码时: #if 11 & 10 == 10 #endif 表达式的计算结果为true,但当我将其更改为以下内容时: #if 10 & 10 == 10 #endif 求值返回false,而基于&operator的定义,它仍应返回true(当我尝试使用预处理器时,这是正确的)。 通常,无论我尝试什么,如果第一个操作数中有0,则返回false,忽略结果 有人知道问题出在哪里吗 似乎是罪魁祸首,因为==是在&之前评估的。括号对我有用: #if (10 & 10

当我尝试以下代码时:

#if 11 & 10 == 10
#endif
表达式的计算结果为true,但当我将其更改为以下内容时:

#if 10 & 10 == 10
#endif
求值返回false,而基于&operator的定义,它仍应返回true(当我尝试使用预处理器时,这是正确的)。 通常,无论我尝试什么,如果第一个操作数中有0,则返回false,忽略结果

有人知道问题出在哪里吗

似乎是罪魁祸首,因为
==
是在
&
之前评估的。括号对我有用:

#if (10 & 10) == 10

=
的优先级高于
&

if 11&10==10
计算为
if 11&1
计算为
if 1

if 10&10==10
计算为
if 10&1
计算为
if 0