2 進数を持っています (例: 111001001)。最後の 5 桁 (01001) を取得しようとしています。これどうやってするの?各桁を配列に格納してから、for ループで値を取得することを考えました。しかし、何か良い方法はありますか?
質問する
7793 次
3 に答える
11
マスキングすることで、最後の 5 ビットだけを取得できます。
x = x & 0x1f;
これらの各ビットを処理したい場合は、ループで個別にテストできます。
for (i = 0; i < 5; ++i)
{
if (x & (1 << i)) // if bit i is set
{
// do something for bit i = 1
}
else
{
// do something else for bit i = 0
}
}
(注: この場合、最初にマスクする必要はありません。)
于 2013-10-24T09:54:24.750 に答える
10
ビットマスクを使用するだけです:
int val = value & 0x1F;
説明:
1 1100 1001 ---> your value
0 0001 1111 ---> the bitmask
1 F ---> hexadecimal equivalent of the bitmask
-----------
& 0 0000 1001 ---> value & bitmask
バイナリ & (AND) 演算には、次の真理値表があります。
┌─────╥───┬───┐
│ A&B ║ 0 │ 1 │
╞═════╬═══╪═══╡
│ 0 ║ 0 │ 0 │
├─────╫───┼───┤
│ 1 ║ 0 │ 1 │
└─────╨───┴───┘
値とビットマスクが 1 であるビットだけが結果で 1 になります。これにより、値から保持するビットを効果的に制御できます。
于 2013-10-24T09:54:22.557 に答える
1
答えはnumber & 31
です。
31
=11111
バイナリで
于 2013-10-24T09:54:35.457 に答える