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