uint8_t があり、特定のビットを読み書きする必要があります。どうすればこれを行うことができますか。具体的には、ある値の最初の 7 ビットと別の値の最後のビットを書き込み、後で読み取る必要があるということです。
編集:指定するのを忘れました。これらをビッグエンディアンとして設定します
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 を学ぶときに非常に役立ちます。