16 進数の特定のビットを取得して検証する方法はありますか?
例: 0x11 で、インデックス 2 が 1 かどうかを知りたい。そうであれば、アクションを実行します。
ビット操作で調べましたが、特定のビットについては何も見つかりませんでした。
に基づいて、 Cまたは同じビット演算子を使用するのに十分類似したものを使用している0x11
と推測します。
この場合、気になるビットが設定されたビットマスクを作成することから始めます。そのビットが設定されたマスクを取得するには、通常1
(最下位ビットのみが設定されている)を取得し、適切な数の場所にシフトして、その1つのビットを目的の位置に配置します。
and
次に、マスクと入力の間でビット単位で実行します。
最後に、その結果and
がゼロかどうかを確認します。
int position = 2;
int bitmask = 1 << position;
if (input & mask)
// that bit was a 1
else
// that bit was a 0
うーん....数字を複製し、その桁の値をゼロに変更し、XOR を使用するとどうなりますか?
例: 3 桁目 (左から右) が 1 か 0 かを知りたい:
001011011
XOR
000011011
---------
001000000 // "TRUE"
000011011
XOR
000011011
---------
000000000 // "FALSE"
111111111
XOR
110111111
---------
001000000 // "TRUE"
等...