UnitConv
ビット演算

ビット演算計算機

32ビット整数のAND・OR・XOR・NOT・シフトを、ビット単位の可視化付きで計算

オペランド

オペランドA
オペランドB

演算

結果

12 & 10
10進8
符号なし8
16進0x00000008
2進00000000000000000000000000001000

結果の32ビット表現

0
31
0
30
0
29
0
28
0
27
0
26
0
25
0
24
0
23
0
22
0
21
0
20
0
19
0
18
0
17
0
16
0
15
0
14
0
13
0
12
0
11
0
10
0
9
0
8
0
7
0
6
0
5
0
4
1
3
0
2
0
1
0
0
MSB (bit 31)LSB (bit 0)

値は32ビット整数として扱います。符号付き10進は最上位ビットを符号とみなす2の補数表現、符号なし10進は32ビット全体を正の値として読みます。右シフトは論理シフト(左から0が入ります)です。

このツールについて

ビット演算計算機は、2つの整数に対するAND・OR・XOR・NOT・左右シフトを計算する、開発者と情報系学生のためのツールです。各オペランドを2進・10進・16進のいずれかで入力でき、結果は3つの基数すべてで同時に表示されます。さらに32ビットのビットマップをリアルタイムに描画するため、どのビットが反転したかを一目で確認できます。フラグやビットマスクのデバッグ、権限ビットの操作、データのパッキング、コンピュータが最下層でビットをどう扱うかの学習に役立ちます。

使い方

  1. 1 オペランドAを入力し、基数(2進・10進・16進)を選びます。
  2. 2 演算を選びます。AND・OR・XOR・左右シフト、または単項のNOT。
  3. 3 2項演算ならオペランドBを、シフトならシフトするビット数を入力します。
  4. 4 結果を10進・符号なし・16進・2進で読み、ハイライトされたビットを確認します。

仕組み

ビット演算は32本のビットを1本ずつ独立に処理します。ANDは両方のビットが1のときだけ結果ビットを1にするため、特定のビットだけを残す「マスク」に使います。ORはどちらかのビットが1なら1にするので、フラグを立てる用途に使います。XORは2つのビットが異なるときだけ1にするため、ビットの反転(トグル)や簡易チェックサムに最適です。NOTは単項演算で、すべてのビットを反転し0を1に、1を0にします。左シフト(<<)は全ビットを最上位側へ動かし空いた桁を0で埋めるため、1桁ごとに2倍になります。論理右シフト(>>)は逆向きに動かし0で埋めます。負の数は2の補数で格納されるため、同じ32ビットを符号付き(最上位ビットが符号)としても符号なしとしても読めます。これがこのツールが両方を表示する理由です。例えば 12 AND 10 = 8、12 OR 10 = 14、12 XOR 10 = 6、1 << 4 = 16、NOT 0 は全ビットが1で符号付きなら-1、符号なしなら4294967295になります。

よくある質問

AND・OR・XORの違いは?

ANDは両方のオペランドで立っているビットだけを残すので、マスクによるビットのクリアや検査に使います。ORはどちらかで立っていれば1にするので、ビットを立てる用途です。XORはちょうど一方だけで立っているときに1にするので、ビットの反転や差分検出に使います。

なぜ NOT 0 が -1 でも 4294967295 でもあるのですか?

NOTは32ビットすべてを反転するため、0は32個の1になります。これを2の補数の符号付き整数として読むと-1、符号なし32ビット整数として読むと4294967295です。どちらも同じビットを表します。

左シフト・右シフトは実際に何をしますか?

nビット左シフトは全ビットを最上位側へn桁動かし0で埋めるため、2のn乗倍になります。nビット論理右シフトは逆向きに動かし0で埋めるため、非負の値では2のn乗で割ったことになります。

なぜ32ビットに限定されるのですか?

JavaScriptのビット演算子や多くのCPUの整数レジスタは32ビット幅で動作するため、本ツールもそれに合わせています。シフト量は32で割った余りが使われ、値は32ビットの範囲で折り返します。これはC・Java・JavaScriptと同じ挙動です。

関連ツールと用途

1つの値を2進・8進・10進・16進で相互変換するには進数変換ツールを、文字コードにはASCII変換を、色のマスク操作にはカラーコード変換をご利用ください。