让我感到沮丧的代码如下:
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.
运算符优先级,编译时带有警告:
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)
查看运算符优先级,解析为
0x00000FF0 & (0x00000FF0 == 0x00000FF0)
Run Code Online (Sandbox Code Playgroud)
当你想要的时候
(0x00000FF0 & 0x00000FF0) == 0x00000FF0
Run Code Online (Sandbox Code Playgroud)
添加括号,您应该得到预期的结果.
这是一个简单的优先事项.
从事物的声音来看,你假设:0x00000FF0 & 0x00000FF0 == 0x00000FF0;将被视为:(0x00000FF0 & 0x00000FF0) == 0x00000FF0;,但实际上它与:相同:0x00000FF0 & (0x00000FF0 == 0x00000FF0);.
后者是情况下,结果是明显false-- ==或者产生0或1,和0xff0 & 1和0xff0 & 0或两者0.
| 归档时间: |
|
| 查看次数: |
207 次 |
| 最近记录: |