我只想問一個問題。按位操作!x和x == 0
是!x
是否與x==0
相同?
我正在使用這些來測試一個條件(中斷),在這種情況下,x
只是一個位。 我正在使用它的代碼示例:
if(PIR1bits.SSPIF & !SSPCON2bits.ACKSTAT)
{
// some operation
}
我只想問一個問題。按位操作!x和x == 0
是!x
是否與x==0
相同?
我正在使用這些來測試一個條件(中斷),在這種情況下,x
只是一個位。 我正在使用它的代碼示例:
if(PIR1bits.SSPIF & !SSPCON2bits.ACKSTAT)
{
// some operation
}
爲什麼不做一個簡單的表?
x !x x==0
0 1 1
1 0 0
所以if(!x)
或if(x==0)
評價應該是你的情況是相同的。
編輯 只是爲了精確,在你的代碼&
運營商指的是按位與運算,所以如果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的低四位,並指定這一個。
我想你的意思是'==' – Eregrith