2017-08-02 5 views
-1

IF ...しかし、私はバイナリに苦労しているようだ... は、私は次の行により、実際の横に再び質問して申し訳ありませんが条件バイナリ引数で

MGC_SSPBUF_REG = (GESTIC_I2C_ADDR << 1) | 1; // write Address to MGC3130 

をつまずいた、その `tのは、なぜ、知っています私はそれを保存するために左にアドレスをシフトするだろう、私はそのOR操作の周りに私の頭を得ることはできません。

「1」とORしたアドレスを指定すると、常に1111 1111が返されます。


私は次の行を偶然見つけ、別の会社が を書かれたコードを確認しながら、私はCでマイクロチップPIC18F14K50をプログラミングしています:

if(MGC_SSPCON2_REG & 0x1F) { // MSSP not idle 
... 
} 

今、MGC_SSPCON2_REGが

#define MGC_SSPCON2_REG   SSPCON2 
を次のように実装されています

ここで、SSPCONは8ビットMSSP制御レジスタです(I2C MODEの場合)。

私が理解していないのは、このif-conditionの仕組みです。 8ビット2進数のすべてのビットが1に設定されている場合は正しいですか? 私が理解する限り、引数は8ビットレジスタと2進数の0001 1111(0x1F)のビット単位のAND演算です。

質問を理解するのに十分なコードを用意していただきたいと思います。私は、登録がどのように機能するかについて多くの詳細を知りたいとは思っていませんでした。

はあなたの助けのために事前にありがとうございます:)

答えて

2

を任意の5つの最下位ビットが原因でビット単位のと0x1Fのと(設定されている場合。とORアドレスを持つ

+0

ありがとうございました:) – user3554329

0

それが実行されます"1"を指定すると、常に1111 1111が返されますが、それはできません。

いいえ、なぜ1でなければならないのですか?値1(000000..0001)をOR ORed値、すなわち最下位ビットが1だけにセットされる。

xyzxyzあなたの住所GESTIC_I2C_ADDRの値は、後でxyzxyz1となる場合があります。

他のすべてのビットも同様に影響を受ける理由はありません。私は理解していない何


、条件があれば、どのように動作するか、このです。 8ビット2進数のすべてのビットが1に設定されている場合は正しいですか?

まあ、数学的にspaking:はい。 ;) "IFとONLY IF"ではなく、5ビットがすべて設定されています。 ビットのうちの1つだけが設定されている場合も同様です。

私が理解する限り、引数は8ビットレジスタと2進数の00011111(0x1F)のビット単位のAND演算です。

これを理解していて、「ビット単位」という言葉を理解していれば、すべてが明確になるはずです。

すでにこの意味を理解していれば、上記の質問にどのようになっているのだろうか。

+0

"いいえ、なぜそれがすべて1であるべきですか?値1(000000..0001)をORすると、ORed値に設定されているビットのみが設定され、つまり、最下位ビットは1つだけです。私は愚かであり、すべてが1であると考えているため、すべてのビットが1とORされます。 ありがとうございました! – user3554329

+0

"経験の浅いが、学びたい"と "愚かな者"を混ぜてはいけません。間違った前提があっても、もっともらしい理由があるかもしれません。 – Gerhardh

関連する問題