-1

質問したいだけです。

!xと同じですかx==0

これらを使用して条件 (割り込み) をテストしていますが、この場合xは 1 ビットのみです。私が使用しているコードのサンプル:

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

2 に答える 2

4

簡単なテーブルを作ってみませんか?

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

if(!x)したがって、 orの評価はif(x==0)あなたの場合と同じになるはずです。

編集 コード内で&演算子がビットごとの AND 演算子を参照することを正確にするために、条件は次の場合PIR1bits.SSPIF=1にのみ真になります。SSPCON2bits.ACKSTAT=0

于 2015-05-12T14:08:50.487 に答える
0

コインコインで指摘されているように、おそらくコードを読みたいと思うでしょう

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

ビット単位の「and」ではなく、論理「and」を使用しているようにします。ビット単位の演算子 (&、|、^、~) は通常、バイトまたはワード内のビットをテスト、設定、またはクリアするマスクを実装するために使用されます。if ステートメントでそれらを使用すると、デバッグが困難な奇妙な動作をする危険があります。

次のようなことができます

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

ビット15が設定されているかどうかをテストするなど

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

b の下位ニブルをクリアし、これを a に割り当てます。

于 2015-05-12T17:04:50.097 に答える