我只是想问一个问题。
是!x
一样的x==0
吗?
我正在使用这些来测试一个条件(中断),在这种情况下x
只有一个位。我使用它的代码示例:
if(PIR1bits.SSPIF & !SSPCON2bits.ACKSTAT)
{
// some operation
}
为什么不做一个简单的表?
x !x x==0
0 1 1
1 0 0
if(!x)
所以在你的情况下, or的评估if(x==0)
应该是相同的。
编辑
只是为了准确地说,在您的代码中,&
运算符指的是按位 AND 运算符,因此您的条件只有在PIR1bits.SSPIF=1
并且SSPCON2bits.ACKSTAT=0
正如 coincoin 所指出的,您可能希望您的代码能够阅读
if(PIR1bits.SSPIF && !SSPCON2bits.ACKSTAT) {...}
这样您就可以使用逻辑“与”而不是按位“与”。位运算符(&、|、^、~)通常用于实现掩码,以便在字节或字中测试、设置或清除位。如果在 if 语句中使用它们,则可能会出现难以调试的奇怪行为。
你可以做类似的事情
if (i & 0x80) {...}
测试是否设置了第 15 位,或者类似的东西
uint16_t a, b;
a = b & 0xfff0;
清除 b 的低半字节并将其分配给 a。