3

2 進数を持っています (例: 111001001)。最後の 5 桁 (01001) を取得しようとしています。これどうやってするの?各桁を配列に格納してから、for ループで値を取得することを考えました。しかし、何か良い方法はありますか?

4

3 に答える 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 に答える