2

uint8_t があり、特定のビットを読み書きする必要があります。どうすればこれを行うことができますか。具体的には、ある値の最初の 7 ビットと別の値の最後のビットを書き込み、後で読み取る必要があるということです。

編集:指定するのを忘れました。これらをビッグエンディアンとして設定します

4

1 に答える 1

5

bitmaskingを探しています。~C のビット演算子、|&などの使用方法を学ぶ^ことは非常に役立ちます。調べてみることをお勧めします。

それ以外の場合 -- 最下位ビットを読み取りたいですか?

uint8_t i = 0x03;

uint8_t j = i & 1; // j is now 1, since i is odd (LSB set)

それを設定しますか?

uint8_t i = 0x02;
uint8_t j = 0x01;

i |= (j & 1); // get LSB only of j; i is now 0x03

i の最上位 7 ビットを j の最上位 7 ビットに設定したいですか?

uint8_t j = 24; // or whatever value
uint8_t i = j & ~(1); // in other words, the inverse of 1, or all bits but 1 set

これらの i のビットを読みたいですか?

i & ~(1);

i の N 番目 (ゼロからのインデックス、0 は LSB) ビットを読み取りたいですか?

i & (1 << N);

それを設定しますか?

i |= (1 << N); // or-equals; no effect if bit is already set

これらのトリックは、C を学ぶときに非常に役立ちます。

于 2013-10-28T03:28:52.247 に答える