2進数の引き算計算ツール:繰り下がり、2の補数、完全な計算例
2進数の引き算計算ツールは、基数2で書かれた2つの数の差を求めてくれます。しかし手計算で同じ答えにたどり着くには、2つの異なる方法を理解しておく必要があります。1つは、紙の上で10進数を引き算するのと同じ要領で進める直接の繰り下がり、もう1つは、コンピュータのハードウェアが実際に採用している2の補数による減算です。本ガイドでは、複数の0を連鎖して通り抜ける繰り下がりを含む完全な計算例で両方の方法を解説し、すべての答えを10進数で検算しながら、2進数の引き算でつまずきやすいミスも整理します。
目次
2進数の減算とは何か、2進数の引き算計算ツールは実際に何を計算しているのか?
2進数の減算とは、0と1の数字だけを使って基数2で書かれた2つの数の差を求める計算です。2進数の引き算計算ツールは、あなたが10進数の計算ですでに知っている「繰り下げて引く」という論理をそのまま適用しているだけで、違うのは桁ごとの規則がずっと少ないことです。すなわち、0 − 0 = 0、1 − 0 = 1、1 − 1 = 0、そして 0 − 1 = 1(左隣の桁から1を繰り下げる)の4つだけです。 この最後の規則こそが、繰り下がりを伴う2進数の減算を難しくしている部分です。基数2では、繰り下がりによって現在の桁に入ってくる値は(10進数のような10ではなく)2だからです。しかも1回の繰り下がりが、借りられる1が見つかるまで複数の0の桁を連鎖して通り抜けることもあります。以下の計算例では、その繰り下がりの連鎖を1桁ずつ追いかけていきます。
2進数の減算の規則:0−0=0、1−0=1、1−1=0、0−1=1(左隣の桁から1を繰り下げる)。
直接の繰り下がりで2進数を引き算するにはどうすればいい?
直接の繰り下がりで解く完全な例を見てみましょう。10110₂ から 01101₂ を引きます。紙の上で10進数を引き算するときとまったく同じように、右から左へ1桁ずつ進めていきます。
1. ステップ1 — 桁をそろえる
1 0 1 1 0 − 0 1 1 0 1 引き算を始める前に、両方の数を一番右(最下位)の桁でそろえます。
2. ステップ2 — 第1桁(一番右):0 − 1
0 − 1 には繰り下がりが必要です。左隣の桁から1を借りると、この桁は 2 − 1 = 1 になります。1 と書き、左隣の桁には繰り下がりの貸しがあると印をつけておきます。
3. ステップ3 — 第2桁:1 − 0 から繰り下がり分を引く
この桁はもともと 1 − 0 ですが、ステップ2で貸した繰り下がりがあるため、(1 − 1) − 0 = 0 になります。0 と書きます。
4. ステップ4 — 第3桁:1 − 1
1 − 1 = 0 で、ここには繰り下がりの貸しはありません。0 と書きます。
5. ステップ5 — 第4桁:0 − 1
0 − 1 にはもう一度繰り下がりが必要です。一番左の桁から1を借りると、この桁は 2 − 1 = 1 になります。1 と書き、一番左の桁に繰り下がりの貸しがあると印をつけます。
6. ステップ6 — 第5桁(一番左):1 − 0 から繰り下がり分を引く
この桁は 1 − 0 ですが、ステップ5で貸した繰り下がりがあるため、(1 − 1) − 0 = 0 になります。0 と書きます。
7. ステップ7 — 答えを読み取り、10進数で検算する
ステップ6からステップ2まで桁を順に読むと 01001₂ です。10進数で確認しましょう:10110₂ = 16+4+2 = 22、01101₂ = 8+4+1 = 13。22 − 13 = 9 で、01001₂ = 8+1 = 9 — 2進数と10進数の結果が一致します。
10110₂ − 01101₂ = 01001₂(10進数では 22 − 13 = 9)— 繰り下がりは2回、10進数の検算でも確認済み。
2進数の減算で繰り下がりが複数の0を連鎖して通り抜けるのはどんなとき?
2進数の引き算計算ツールにとって最も分かりやすく見せにくいのが、繰り下がりの連鎖です。1回の繰り下がりの要求が、1にたどり着くまでいくつもの0の桁を通り抜けていくケースを指します。まさにその場面を見てみましょう:10000₂ から 00001₂ を引きます。
1. ステップ1 — 桁をそろえる
1 0 0 0 0 − 0 0 0 0 1 繰り下がりが必要なのは上の数の一番右の桁だけですが、すぐ近くに直接借りられる1がありません。
2. ステップ2 — 第1桁(一番右):0 − 1 が連鎖の始まり
0 − 1 には繰り下がりが必要ですが、第2桁も0なので、繰り下がりの要求は第3桁へ渡されます。第3桁も0なので第4桁へ、第4桁も0なので、要求はついに1を持つ第5桁に届きます。
3. ステップ3 — 第5桁で繰り下がりが解決し、下の桁へ戻っていく
第5桁の1は、繰り下がりを貸したことで0になります。その繰り下がりによって第4桁は0から2になりますが、第4桁も第3桁に繰り下がりを貸さなければならないため、1を貸して自分には1を残します(2 − 1 = 1)。こうして第4桁は1になります。同じ「貸して1を残す」パターンが第3桁(1になる)と第2桁(1になる)でも繰り返され、最初の繰り下がりがようやく第1桁に届きます。
4. ステップ4 — 第1桁が繰り下がりを受け取って完成する
第5桁からはるばる連鎖してきた繰り下がりを使い、第1桁は 2 − 1 = 1 になります。1 と書きます。
5. ステップ5 — 答えを読み取り、10進数で検算する
第5桁から第1桁まで読むと 01111₂ です。10進数で確認しましょう:10000₂ = 16、00001₂ = 1。16 − 1 = 15 で、01111₂ = 8+4+2+1 = 15 — 結果は一致します。ここで近道にも気づきます。2のべき乗から1を引くと、末尾の0がすべて1に変わるのです。これはまさに、繰り下がりの連鎖が生み出した結果そのものです。
10000₂ − 00001₂ = 01111₂(10進数では 16 − 1 = 15)— 1回の繰り下がりが4つの0の桁を連鎖して通り抜けてから解決する。
2の補数による減算はどう動くのか、なぜコンピュータはそれを使うのか?
手計算なら直接の繰り下がりで十分ですが、コンピュータのハードウェアは減算専用の回路を持っていません。2の補数を使って引き算を足し算に変換し、同じ2進加算器で両方の演算をこなしています。A から B を引くとき、ハードウェアは A +(B の2の補数)を計算し、使用しているビット数からあふれた桁を捨てます。
1. ステップ1 — 引く側の数の2の補数を求める
減数の1の補数(すべてのビットを反転したもの)を取り、そこに1を足します。これでその数の負の値が2進数で表せます。
2. ステップ2 — 引き算ではなく足し算をする
ステップ1で得た2の補数に被減数を足します。計算には通常の2進加算の規則をそのまま使います。
3. ステップ3 — 決めたビット幅に収まるなら、あふれたビットを捨てる
足し算の結果が決められたビット幅を1桁超えた場合(たとえば5ビットの数を扱っていて6ビット目が出た場合)、その桁は捨てます。このあふれは繰り下がりが吸収されたことを表しており、残ったビットが正しい答えです。
2の補数による減算:減数のすべてのビットを反転して1を足し、それを被減数に足して、あふれたビットを捨てる。
2の補数による減算の例はどう解いて、どう確かめるのか?
最初の例をもう一度使いましょう — 5ビットの数で 10110₂ − 01101₂ を計算し、2の補数による減算が直接の繰り下がりと同じ答えにたどり着くことを確かめます。
1. ステップ1 — 01101 の1の補数を求める
01101₂ のすべてのビットを反転します:0→1、1→0、1→0、0→1、1→0 となり、10010₂ が得られます。
2. ステップ2 — 1を足して2の補数にする
10010₂ + 1 = 10011₂。これが5ビットにおける 01101₂ の2の補数(負の値)表現です。
3. ステップ3 — 被減数と2の補数を足す
10110₂ + 10011₂:桁ごとに繰り上がりを処理しながら足すと 101001₂ になります。5ビットの数どうしを足したため、6ビットの結果になっています。
4. ステップ4 — あふれたビットを捨てる
101001₂ から一番左の(6ビット目の)ビットを落とすと、5ビットの答えとして 01001₂ が残ります。
5. ステップ5 — 比べて10進数で検算する
01001₂ は、先ほど直接の繰り下がりで得た結果と完全に一致します。10進数では 22 − 13 = 9 で、01001₂ = 8+1 = 9 — 2つの方法の答えが一致し、2の補数の手順を正しく適用できたことが確認できます。
2の補数で解く 10110₂ − 01101₂:10110 + 10011 = 101001 → あふれたビットを捨てる → 01001₂ = 9。直接の繰り下がりと一致します。
2進数の減算で避けるべきミスは何か?
2進数の減算で答えが合わない原因は、手計算でも計算ツールとの照合でも、ほんの数種類のミスにほぼ集約されます。
1. ミス1 — 2進数の繰り下がりを10進数の繰り下がりのように扱う
基数2の繰り下がりは、現在の桁に10ではなく2を足します。これを忘れて10進数の繰り下がりの感覚で計算すると、繰り下げる向きが正しくても桁の値が間違ってしまいます。
2. ミス2 — 複数の0をまたぐ繰り下がりの連鎖を見失う
繰り下がりがいくつもの0の桁を通り抜けなければならないとき(10000₂ − 00001₂ など)、どの桁にまだ繰り下がりの貸しがあるのかを見失いがちです。1桁ずつ進め、借りた桁には必ずはっきり印をつけましょう。
3. ミス3 — 2の補数でビットを反転したあとに1を足し忘れる
2の補数は、すべてのビットを反転(1の補数)してから1を足す必要があります。この +1 を飛ばすと1の補数のままになり、正しい答えから1だけずれた結果になります。
4. ミス4 — 固定ビット幅の2の補数の減算であふれたビットを残してしまう
nビットの数を2つ足して (n+1) ビットの和になった場合、その余分な一番左のビットを捨てないと正しいnビットの答えになりません。残したままにすると、結果はまったく別の値になってしまいます。
5. ミス5 — 10進数での検算を省く
両方の数と最終的な答えを10進数に直すのは数秒で済み、引き算のうっかりミスはほとんどその場で見つかります。2進数の桁が1つ違うだけで、10進数に直すと明らかにおかしな値になるからです。
2進数の繰り下がりは、現在の桁に10ではなく2を足す — これが2進数の減算で最も多い間違いの原因です。
練習問題:この2進数の引き算を解けますか?
答えを見る前に、直接の繰り下がりか2の補数による減算のどちらかを使って、それぞれの問題を手計算で解いてみましょう。
1. 問題1 — 直接の繰り下がり、繰り下がり1回
1000₂ から 0011₂ を引きます。答え:1000₂ − 0011₂ = 0101₂。10進数の検算:8 − 3 = 5、0101₂ = 4+1 = 5。
2. 問題2 — 2の補数による減算
2の補数を使って 1010₂ から 0110₂ を引きます。答え:0110₂ の1の補数は 1001₂ で、1を足すと 1010₂。足し算すると 1010₂ + 1010₂ = 10100₂。あふれたビットを捨てると 0100₂。10進数の検算:10 − 6 = 4、0100₂ = 4。
3. 問題3 — 3つの0をまたぐ繰り下がりの連鎖
100000₂ から 000001₂ を引きます。答え:繰り下がりが4つの0の桁を連鎖して通り抜けるため、100000₂ − 000001₂ = 011111₂。10進数の検算:32 − 1 = 31、011111₂ = 16+8+4+2+1 = 31。
これらの問題はどれも、結局は同じ2つの動作に帰着します。繰り下がりを1桁ずつ追いかけるか、2の補数に変換して足すか — そして必ず10進数で検算することです。
2進数の減算は実際のコンピューティングのどこで使われている?
2進数の減算は単なるコンピュータサイエンスの練習問題ではありません。CPUの演算から低レベルプログラミングのバグまで、あらゆるものの土台にある演算です。プロセッサは演算論理装置(ALU)の内部で2の補数による減算を使っており、そのおかげで1つの加算回路が加算と減算の両方をこなせます。それぞれに別のハードウェアを用意する必要はありません。メモリアドレスの計算、ループカウンタ、そして C のような低レベル言語でのポインタ演算も、ハードウェアのレベルではすべて2進数の減算に行き着きます。繰り下がりの連鎖のしくみを理解しておくと、典型的なバグの原因も説明できます。符号なし整数のアンダーフロー、つまり0を下回る引き算をすると負の値にならず非常に大きな値へ回り込んでしまう現象です。これは、連鎖させられる繰り下がりがハードウェアに残っていないために起こります。
ループカウンタの減算からメモリアドレスの計算まで、CPUの引き算はすべて内部では2の補数の足し算です。
Solvify は2進数の引き算計算ツールの結果を確かめるのにどう役立つ?
このガイドで直接の繰り下がりと2の補数による減算を理解したら、Solvify のAI搭載ソルバーを使ってみてください。コンピュータサイエンスの宿題、離散数学の課題、デジタル論理の試験対策など、2進数の計算問題を写真に撮るだけで、同じように桁ごとの手順と補数の手順をたどって解説してくれます。自分の手計算の結果と見比べれば、繰り下がりやビット反転のミスを、採点される課題として提出してしまう前に見つけられます。
2進数の減算に自信をつける一番の近道は、まず1問を手計算で解き、計算ツールは検算にだけ使うことです — その逆ではありません。
関連記事
関連する数学ソルバー
スマートスキャンソルバー
2進数の計算問題を写真に撮るだけで、ステップごとの詳しい解説がすぐ手に入ります。
ステップバイステップソリューション
最終的な答えだけでなく、すべての繰り下がりと2の補数の手順について詳しい説明が得られます。
AI数学チューター
繰り下がりや2の補数、計算のどの手順についても、納得できるまで追加で質問できます。
