10

のような数字があるとしましょう0x448。バイナリでは、これは0100 0100 1000.

ビット単位の操作を使用して、ビット 1、2、および 3 をすべて 0 またはすべて 1 に設定するにはどうすればよいですか? 最初の 3 つと言うときは、右端のビットを 0 ビットとしてカウントしています。

たとえば、

1 のビット:

b12            b0 
  0100 0100 1110
            ^^^

0 のビット:

b12            b0
  0100 0100 0000
            ^^^

それらを1に設定するには、ビットごとのORをマスク14(0x000e)で使用すると思いますか?しかし、その場合、ビットをクリアするために同様のことを行うにはどうすればよいですか?


関連している:

4

7 に答える 7

19

正しいビット設定がありますOR。設定したいビットのマスクを使用します。

ビットをクリアするビットは非常に似ています:ANDクリアしたいビットの 1 の補数を使用します。

例: の単語0x0448

設定ビット 1、2、および 3 は次のようになりますWord OR 0x000e

    0000 0100 0100 1000 = 0x0448
 OR 0000 0000 0000 1110 = 0x000e
    ---- ---- ---- ----
  = 0000 0100 0100 1110 = 0x044e

ビット 1、2、および 3 をクリアすると、次のようになりますWord AND 0xfff1

    0000 0100 0100 1000 = 0x0448
AND 1111 1111 1111 0001 = 0xfff1
    ---- ---- ---- ----
  = 0000 0100 0100 0000 = 0x0440

1 の補数について詳しく説明すると、クリア用の AND パターンは、設定用の OR パターンの論理否定です (各ビットが反転されます)。

 OR 0000 0000 0000 1110 = 0x000e
AND 1111 1111 1111 0001 = 0xfff1

したがって、両方の値を計算する代わりに、お気に入りの言語の NOT 演算を使用できます。

于 2009-04-15T03:59:22.823 に答える
4

設定またはクリアするすべてのビットに対してビットが 1 に設定され、それ以外の場合は 0 に設定されたマスク m があるとします。

  • クリア ビット: x & (~m)
  • ビットを設定: x | メートル
  • 反転ビット: x ^ m

位置 p (0 から始まる) の 1 ビットのみに関心がある場合、マスクは m = 1 << p と表現するのが簡単です。

ここでは、C スタイルの規則を使用していることに注意してください。

  • ~ は 1 の補数です: ~10001010 = 01110101
  • & はビットごとの AND です
  • | | はビットごとの OR です
  • ^ はビットごとの XOR です
  • << は左ビット シフトです: 10001010 << 2 = 00101000
于 2009-04-15T03:58:07.617 に答える
1

OR と 1 は常に真です。AND と 0 は常に false です。:)

于 2009-04-15T03:55:18.683 に答える
0

OR 0x14 が正しいと仮定すると、クリアは次のようになります。

かつ (0x14 ではない)

于 2009-04-15T03:56:29.833 に答える
0

ビットをクリアするには、0x440 との AND を使用します

于 2009-04-15T03:59:42.183 に答える
0
number &= ~0xe
于 2009-04-15T04:01:57.700 に答える