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

use*_*755 5 c c-preprocessor

当我尝试以下代码时:

#if 11 & 10 == 10
#endif
Run Code Online (Sandbox Code Playgroud)

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

#if 10 & 10 == 10
#endif
Run Code Online (Sandbox Code Playgroud)

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

有谁知道问题是什么?

chr*_*ock 7

操作顺序似乎==是以前评估的罪魁祸首&.括号为我工作:

#if (10 & 10) == 10
Run Code Online (Sandbox Code Playgroud)


aqu*_*qua 5

== 优先级高于 &

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

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