将 uint8_t 与 C++ 中的十六进制进行比较

Compare uint8_t with hexadecimal in C++

假设我有 uint8_t bytes[maxBytes];

现在我想比较第一个字节(bytes[0])的低6位与0x3c

我试过这样做:

bytes[0] & 0x3f == 0x3c

不幸的是,这没有产生预期的结果。 (即它总是错误的,即使当我打印出 bytes[0] & 0x3f 时,它是 0x3c

我已经尝试了更多,发现

bytes[0] & 0x00 == 0x00

有时是真的,有时是假的。 (与 bytes[0] & 0x0 == 0x0bytes[0] & 0x00 == 0x0 相同)。它不应该永远是真的吗?

这是怎么回事?我怎样才能使我的 0x3c 比较有效?

Sitenote:我 运行 这段代码在带有 atmega328pb MCU 的 arduino 上。

你需要括号:

(bytes[0] & 0x3f) == 0x3c

这是因为 &| 的奇怪优先级是从 C 继承的,而 C 又从 B 继承了它们(Dennis Ritchie 在 https://www.bell-labs.com/usr/dmr/www/chist.html 中描述了这个优先级问题)。