本文へスキップ

2進数計算ツール

2つの2進数を入力すると、和、差、積、商が得られます。繰り上がり、繰り下がり、部分積、長除法の手順が、桁ごとに並べて示されます。ビット演算モードに切り替えると、4〜128ビットでAND、OR、XOR、NOT、シフト、ローテートを適用できます。無料で、登録は不要です。内容がブラウザの外に送信されることはありません。

演算の種類

使えるのは2進数の桁だけで、先頭にマイナスを付けられます。スペースとアンダースコアは無視されるので、1011 0110 も入力できます。

結果

1 0010

2進数

18

10進数

12

16進数

22

8進数

5ビット

桁数

計算過程

繰り上がりを伴う桁ごとの加算
行43210
入る繰り上がり11010
A01101
B00101
和10010

2進数計算ツールの使い方

  1. 1. 演算の種類を選びます。 算術は加算、減算、乗算、除算を行います。ビット演算は、固定幅のビットパターンの個々のビットに対して働きます。
  2. 2. 数を入力します。 使えるのは0と1だけです。先頭のマイナス、0bの接頭辞、スペース、アンダースコアはすべて使えるので、1011 0110 は1つの数として読まれます。
  3. 3. ビット幅を選びます(ビット演算のみ)。 NOT、シフト、ローテートはビット幅がないと意味を持たないため、4、8、16、32、64、128ビットのいずれかを指定します。
  4. 4. 結果と計算過程を読みます。 答えは2進数、10進数、16進数、8進数で表示され、その下に桁ごとの計算過程が並びます。

2進数の加算のしくみ

2進数の加算は10進数と同じ桁の規則に従いますが、桁があふれるのは10ではなく2のときです。ある桁の2つのビットに、右から来た繰り上がりを足します。合計が0か1なら、そのまま書きます。2か3なら、下位のビット(0または1)を書き、1を次の桁に繰り上げます。

1桁の4つのケース
桁の合計書くビット繰り上がり
0 + 0 + 0 = 000
1 + 0 + 0 = 110
1 + 1 + 0 = 10 (2)01
1 + 1 + 1 = 11 (3)11

1101(13)と 101(5)を足してみます。計算ツールは両方の数を5桁に揃え、各桁に入ってくる繰り上がりを表示します — 左から右へ 11010 — 結果は 10010、つまり18です。繰り上がりの行は、手で加算するときに人が見落としやすい部分です。

減算、乗算、除算

減算は逆向きに行います。ある桁で 1 − 1 − 1 や 0 − 1 が必要になると、左隣の桁から1を借ります。この桁では2の価値があります。1000 − 0011 では、借りが3桁にわたって伝わり、0101(8 − 3 = 5)で終わります。Aが Bより小さいときは、小さい方を大きい方から引き、結果にマイナス符号を付けます。

乗算はシフトと加算です。乗数の各1は、被乗数をそのビットの位置の分だけ左にずらした写しを寄与し、0は何も寄与しません。1011 × 101(11 × 5)では、1は位置0と2にあるので、部分積は 1011 と 101100 になり、その和は 110111、つまり55です。

除算は、非常に簡単な推測を伴う長除法です。被除数のビットを一度に1つずつ下ろします。除数が今の値に収まれば引いて商に1を書き、収まらなければ0を書きます。1100100 ÷ 111(100 ÷ 7)は商 1110(14)、余り 10(2)になります。負のオペランドでは、商は0に向かって切り捨てられ、余りはAの符号を持ちます。これは C、Java、JavaScript と同じ規則です。

指定したビット幅でのビット演算

2入力のビット演算
ABANDORXORNANDNORXNOR
00000111
01011100
10011100
11110001

4ビットで 1100 と 1010 を使うと、ANDは 1000、ORは 1110、XORは 0110 になります。NOTは幅の中のすべてのビットを反転させるため、同じ 1100 は4ビットでは 0011、8ビットでは 11110011 になります。このため幅が重要です。

左シフトは、nだけすべてのビットを上へ動かし、空いた位置を0で埋めます。上から溢れたビットは失われ、計算ツールはそれを一覧にします。論理右シフトは0で埋めます。算術右シフトは最上位ビットをコピーするため、負の数は負のままです。例えば 10110110 を2ビット右にシフトすると、論理では 00101101、算術では 11101101(−19)になります。ローテートは、一方の端から溢れたビットを反対側に戻すため、何も失われません。

算術モードではオーバーフローしません

ここでの算術は任意の桁数で正確に行われるため、11111111 + 1 は0ではなく 100000000 になります。実際のハードウェアは固定のビット数を保ち、折り返します。その動作と、それに伴う符号付きの範囲を見るには、Two's Complement Calculator を使ってください。

よくある間違い

  • 最も左の桁への繰り上がりを忘れること。 8ビットの2つの数の加算は、9ビットの答えになることがあります。計算ツールは余分な桁を残します。
  • 論理右シフトと算術右シフトを取り違えること。 正の数では同じ結果になり、最上位ビットが1のパターンでは違う結果になります。言語によっても異なります。Javaの >> は算術、>>> は論理ですが、Cでは負の符号付き値に対する >> の扱いはコンパイラに任されています(主流の処理系では算術)。
  • ビットパターンを、うっかり符号付きの数として読むこと。 11110011 は符号なしでは243、2の補数では−13です。ビット演算の結果は両方を示すので、どちらの意味か判断できます。
  • NOTがビット幅に依存しないと思い込むこと。 制限のない整数では、12のNOTは−13です。固定幅の中では補数のパターンになり、このツールはそれを返します。

よくある質問

2進数はどのように加算しますか?
右端の桁から左へ、2つのビットと繰り上がりを足していきます。桁の合計が0か1ならそのまま書き、2なら0を書いて1を繰り上げ、3なら1を書いて1を繰り上げます。例えば 1101 + 101 = 10010 です。計算ツールは、各桁に入る繰り上がりを表示します。
2進数はどのように減算しますか?
右から桁ごとに引きます。ある桁で0より小さくなる場合は、左隣の桁から1を借ります。これは現在の桁に2を足すことになります。2つ目の数が大きい場合は逆の順序で引き、答えにマイナス符号を付けます。1000 − 11 = 101(8 − 3 = 5)。
論理右シフトと算術右シフトの違いは何ですか?
論理右シフトは空いた上位ビットを0で埋めるため、パターンを符号なしの数として扱います。算術右シフトは元の最上位ビットをコピーするため、負の2の補数の数は負のままです。どちらも値を半分にしますが、負の値を正しく丸めるのは算術シフトだけです。
AND、OR、XORは何をしますか?
2つのビットパターンを桁ごとに比べます。ANDは両方のビットが1のときだけ1、ORは少なくとも一方が1のとき1、XORは片方だけが1のとき1を返します。ANDはビットのマスクに、ORはビットのセットに、XORはビットの反転や違いの比較に使われます。
このツールは負の2進数を扱えますか?
算術モードでは扱えます。前にマイナス符号を付けると、符号の規則が正確な結果に適用されます。ビット演算モードでは、代わりに平文のビットパターンを受け付けます。負の数のパターンは幅によって変わるためです。負の値のパターンを調べるには、Two's Complement Calculator を使ってください。
どれくらい大きな2進数を入力できますか?
任意精度の整数で計算するため、固定の上限はありません。桁ごとの計算過程は64ビットまでのオペランドについて描かれ、それを超えると計算過程の表は省かれますが、正確な結果は得られます。ビット演算は選んだ幅に制限され、最大128ビットです。

関連ツール

データ・マークアップ・コードのその他のツール