2

10 進値がある場合: 123
とそのバイナリ バージョン: 01111011

intこのバイトから左端の 4 ビットと右端の 4 ビットを 2 つの個別の変数に取得するにはどうすればよいですか?

つまり:

int a = 7;  // 0111 (the first four bits from the left)
int b = 11; // 1011 (the first four bits from the right)

とても有難い!

4

1 に答える 1

9
int x = 123;
int low = x & 0x0F;
int high = (x & 0xF0) >> 4;

これは、マスキングシフトと呼ばれます。(これは binaryです) でANDing することにより、上位 4 ビットを削除します。(バイナリ) を使用すると、下位 4 ビットが削除されます。次に (後者の場合)、4 ビットだけ右にシフトします。つまり、下位 4 ビットを押しのけ、上位 4 ビットだけを残します。0xF00001111AND0xF011110000

以下のコメントで @owlstead が述べているように、上位ビットを取得する別の方法があります。下位ビットをマスクしてからシフトする代わりに、シフトするだけです。

int high = x >> 4;

下位ビットはマスクする必要がないことに注意してください。なぜなら、下位ビットが何であれ、それらは消えてしまったからです (それらを押し出しました)。上記の例は、最初に明示的にゼロにするのでより明確ですが、この特定の例ではそうする必要はありません。

しかし、16 ビット (通常は 32 ビット) より大きい数値を処理するには、さらに上位の 16 ビットが邪魔になるint可能性があるため、マスクする必要があります。

int high = (x >> 4) & 0x0F;

于 2012-10-08T23:43:40.227 に答える