按位运算结果和布尔值

Rus*_*tam 6 c c++

让我感到沮丧的代码如下:

bool a = 0x00000FF0 & 0x00000FF0 == 0x00000FF0;
if (a) {
  Serial.println("True");
} else {
  Serial.println("False");
}
Run Code Online (Sandbox Code Playgroud)

这打印"假".我真的不明白为什么.更多测试:

bool a = 0x00000FF0 & 0x00000FF0 == 0x00000FF0;
Serial.println(a);
Run Code Online (Sandbox Code Playgroud)

打印0.

和:

unsigned long a = 0x00000FF0 & 0x00000FF0;
Serial.println(a, HEX);
Run Code Online (Sandbox Code Playgroud)

打印FF0.

Dav*_*eri 8

运算符优先级,编译时带有警告:

warning: suggest parentheses around comparison in operand of ‘&’ [-Wparentheses]
Run Code Online (Sandbox Code Playgroud)

改成

bool a = (0x00000FF0 & 0x00000FF0) == 0x00000FF0;
Run Code Online (Sandbox Code Playgroud)


Mik*_*our 7

查看运算符优先级,解析为

0x00000FF0 & (0x00000FF0 == 0x00000FF0)
Run Code Online (Sandbox Code Playgroud)

当你想要的时候

(0x00000FF0 & 0x00000FF0) == 0x00000FF0
Run Code Online (Sandbox Code Playgroud)

添加括号,您应该得到预期的结果.


Jer*_*fin 5

这是一个简单的优先事项.

从事物的声音来看,你假设:0x00000FF0 & 0x00000FF0 == 0x00000FF0;将被视为:(0x00000FF0 & 0x00000FF0) == 0x00000FF0;,但实际上它与:相同:0x00000FF0 & (0x00000FF0 == 0x00000FF0);.

后者是情况下,结果是明显false-- ==或者产生01,和0xff0 & 10xff0 & 0或两者0.