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

Compare uint8_t with hexadecimal in C++

本文关键字:十六进制 比较 C++ uint8      更新时间:2023-10-16

假设我有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比较有效?

站点说明:我在带有atmega328pb MCU的arduino上运行此代码。

你需要括号:

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

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