让我感到沮丧的代码如下:
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
。
答案 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);
相同
后者属于这种情况,结果显然是错误的 - ==
生成0
或1
,0xff0 & 1
和0xff0 & 0
或两者都是0