c – 按位运算结果和布尔值

让我感到沮丧的代码如下:
bool a = 0x00000FF0 & 0x00000FF0 == 0x00000FF0;
if (a) {
  Serial.println("True");
} else {
  Serial.println("False");
}

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

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

打印0.

和:

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

打印FF0.

解决方法

运算符优先级,编译时带有警告:
warning: suggest parentheses around comparison in operand of ‘&’ [-Wparentheses]

改成

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

相关文章

首先GDB是类unix系统下一个优秀的调试工具, 当然作为debug代...
1. C语言定义1个数组的时候, 必须同时指定它的长度.例如:int...
C++的auto关键字在C+⬑新标准出来之前基本...
const关键字是用于定义一个不该被改变的对象,它的作用是告诉...
文章浏览阅读315次。之前用C语言编过链表,这几天突然想用C+...
文章浏览阅读219次。碰到问题就要记录下来,防止遗忘吧。文章...