
君たちは、コンピューターがどうやって引き算をするか知ってるかな?

え?普通に数を引いているだけじゃないんですか?

違うんだ。
実はコンピューターは引き算をするとき、特定の数を足し合わせているんだ。

引き算なのに、足し合わせているんですか?

そうなんだ。その時に足し合わせる数を補数というんだよ。
今回はそんな補数と引き算について学んでいこう!
補数とは
補数とは

補数とは、ある特定の数を作り出すために足し合わせた数のことです。
例えば上の図にあるように、ある数に補数を足して0にしたり、すべての桁を1にしたりできます。
今はまだよく分からないと思いますが、とりあえず補数を足すことで特定の数を作ることができるんだなと思っていてください。
実はコンピューターで引き算をするときは、この補数を用いているんです!
詳しくはこの後解説しますね!
1の補数
1の補数とは
1の補数とは、各桁の値をすべて1にするための補数です。
例えば、4ビットの2進数1001に1の補数を加えると、各桁の値がすべて1になります。

1の補数の求め方
1の補数の求め方は、実は超簡単!足される数の各桁の0と1を逆にするだけなんです!
この場合、1001の1の補数は、1001の各桁を逆にした、「0110」ということになります。

この「1の補数」、単体で試験に出ることはあまりないのですが、次の「2の補数」を求めるために、とてもよく使います。
2の補数
2の補数とは
2の補数とは、先頭の値以外をすべて0にするために足し合わせる補数です。
例えば、「1001」に2の補数を加えると、「10000」となり、先頭の値以外が全て0になっています。
のちに詳しく説明しますが、この2の補数を用いると引き算をすることができるのです。

2の補数の求め方
この2の補数の求め方は、「1の補数+1」をするだけです。
「1001」の例では、1001を逆にした「0110」(1の補数)に、1を加えた「0111」が2の補数になります。
そもそも1の補数ですべて1になっているので、そこに+1をすればすべての桁が繰り上がって0になるのです。

この2の補数の作り方は是非覚えておいてくださいね!
2進数の引き算
引き算をする際の前提
さて、いよいよ補数を用いて引き算の計算を行っていきます。
その際に前提として覚えていてほしいのは、コンピューターの計算では指定された桁数以外の数字はすべて無視されるということです。
例えば、3ビット(2進数の3桁のこと)の整数Aに、1010110という数字を代入するとします。
その場合、Aは3桁だといわれているので、今回だと下から3桁の数しか使われず、残りは捨てられるのです。
したがって、Aは下3桁の110となります。
同様に、4ビットのBに代入するときは、下4桁の数のみが使われるので、Bは0110となります。

コンピューター内部の引き算では、この方法が使われているのです。
2進数の引き算の方法
さて、それでは実際に引き算の方法を解説していきます。
先ほどお話しした通り、コンピューターの中では、補数を足し合わせて引き算をしています。
ここでは例として、3ビットの2進数、101に-101をして0を作ってみましょう。
101に何かを足して0にしたいとき、どうすればいいかわかりますか?
答えは「1000」を作ればいいんです。
先ほどの前提を見てほしいのですが、今回3ビットの2進数と言われているので、下から3桁しか使われず、「1000」は「000」として捉えられるのです。
この場合、「101」に「011」を足すと「1000」=「0」になります。

したがって、今回の場合は「011」というのは「-101」と同じ意味があるということなんですね。
これ、2の補数を用いていることに気づきましたか。
2の補数は、先頭以外のすべての桁の値を0にするために足し合わせる数ということです。
したがってこの2の補数を足し合わせることで先頭の値以外を0にし、
先頭の値を切り落としているので結果として引き算を行うことができるのです。
また、よく問題では「負数」という単語が出てきます。
これは、負の数(-〇〇)を表しているので覚えておいてください。
まとめ

どうだったかな?

パソコンの中では引き算をするために足し算をしているのが新鮮でした!

補数の作り方さえ理解しておけば問題は解けそうです!

そうだね!忘れないうちに練習問題を解いてみてね!
補数 … ある数を作るために足し合わせる数。
1の補数 … すべての桁の値を1にするための補数。
2の補数 … 最初の1桁以外すべて0にするための補数。
練習問題
練習問題1
問)2の補数で表された負数10101110の絶対値はどれか
(令和4年免除 問2から出題)
ア、01010000
イ、01010001
ウ、01010010
エ、01010011
答)ウ、01010010です。
負数とは文字通り負の数のことで、「-〇〇」とかのことを言います。
今回は2の補数というという文言からも、
「○○〇〇○○〇〇」+10101110=100000000になることが分かります
ここで、二の補数の求め方は「値の0と1をひっくり返して最後に1を加える」でしたね。
なので今回は逆からやればいいので、10101110-1をして10101101、
その0と1をひっくり返して答えは01010010となります。