質問したいだけです。
!x
と同じですかx==0
?
これらを使用して条件 (割り込み) をテストしていますが、この場合x
は 1 ビットのみです。私が使用しているコードのサンプル:
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
コインコインで指摘されているように、おそらくコードを読みたいと思うでしょう
if(PIR1bits.SSPIF && !SSPCON2bits.ACKSTAT) {...}
ビット単位の「and」ではなく、論理「and」を使用しているようにします。ビット単位の演算子 (&、|、^、~) は通常、バイトまたはワード内のビットをテスト、設定、またはクリアするマスクを実装するために使用されます。if ステートメントでそれらを使用すると、デバッグが困難な奇妙な動作をする危険があります。
次のようなことができます
if (i & 0x80) {...}
ビット15が設定されているかどうかをテストするなど
uint16_t a, b;
a = b & 0xfff0;
b の下位ニブルをクリアし、これを a に割り当てます。