按位运算结果和布尔值

时间:2014-11-14 17:15:36

标签: c++ c

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

bool a = 0x00000FF0 & 0x00000FF0 == 0x00000FF0;
if (a) {
  Serial.println("True");
} else {
  Serial.println("False");
}

打印“False”。我真的不明白为什么。 还有一些测试:

bool a = 0x00000FF0 & 0x00000FF0 == 0x00000FF0;
Serial.println(a);

打印0

unsigned long a = 0x00000FF0 & 0x00000FF0;
Serial.println(a, HEX);

打印FF0

3 个答案:

答案 0 :(得分:8)

运算符优先级,使用警告编译:

warning: suggest parentheses around comparison in operand of ‘&’ [-Wparentheses]

更改为

bool a = (0x00000FF0 & 0x00000FF0) == 0x00000FF0;

答案 1 :(得分:7)

查看operator precedence,将其解析为

0x00000FF0 & (0x00000FF0 == 0x00000FF0)

何时需要

(0x00000FF0 & 0x00000FF0) == 0x00000FF0

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

答案 2 :(得分:5)

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

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

后者属于这种情况,结果显然是错误的 - ==生成010xff0 & 10xff0 & 0或两者都是0