2015-05-12 129 views
-1

我只想問一個問題。按位操作!x和x == 0

!x是否與x==0相同?

我正在使用這些來測試一個條件(中斷),在這種情況下,x只是一個位。 我正在使用它的代碼示例:

if(PIR1bits.SSPIF & !SSPCON2bits.ACKSTAT) 
{ 
     // some operation 
} 
+3

我想你的意思是'==' – Eregrith

回答

4

爲什麼不做一個簡單的表?

x !x x==0 
0 1 1 
1 0 0 

所以if(!x)if(x==0)評價應該是你的情況是相同的。

編輯 只是爲了精確,在你的代碼&運營商指的是按位與運算,所以如果PIR1bits.SSPIF=1SSPCON2bits.ACKSTAT=0

0

正如coincoin注意,你可能希望你的代碼,以你的條件只能是真閱讀

if(PIR1bits.SSPIF && !SSPCON2bits.ACKSTAT) {...} 

以便您使用邏輯「和」而不是按位「和」。按位運算符(&,|,^,〜)通常用於實現掩碼,用於測試,設置或清除字節或字內的位。如果您在if語句中使用它們,則會冒着難以調試的奇怪行爲。

你可以做這樣的事情

if (i & 0x80) {...} 

測試如果將位15設定,或者類似的東西

uint16_t a, b; 
a = b & 0xfff0; 

清除b的低四位,並指定這一個。