假设我有uint8_t bytes[maxBytes];
。
现在我想比较第一个字节(bytes[0]
)的低6位和0x3c
。
我试着这样做:
bytes[0] & 0x3f == 0x3c
不幸的是,这并没有产生预期的结果。 (即它总是假的,即使我打印出bytes[0] & 0x3f
,它是0x3c
)
我已经玩了一些这个,并发现了
bytes[0] & 0x00 == 0x00
有时是真的,有时是假的。 (与bytes[0] & 0x0 == 0x0
和bytes[0] & 0x00 == 0x0
相同)。它不应该永远是真的吗?
这里发生了什么?如何让我的0x3c
比较工作?
Sitenote:我在arduino w / atmega328pb MCU上运行此代码。
你需要括号:
(bytes[0] & 0x3f) == 0x3c
这是因为&
和|
的奇怪优先权是从C继承的,它从B继承了它们(Dennis Ritchie在https://www.bell-labs.com/usr/dmr/www/chist.html中描述了这个优先级问题)。