[情報数学]2進法のマイナス表現、1の補数と2の補数について

スポンサーリンク

モナ
今回は2進法の補数について勉強するニャ。

チョロ
チュ?(補数って何でチュ?)

キュー
コンピュータ上で簡単に引き算を出来るようにする考え方やな。

チョロ
チュチュ?(コンピュータで引き算て難しいでチュ?)

補数とは

補数はwikipediaによるとある数に加えると、あらかじめ定めた一定数になるような数。とあります。

例えばあらかじめ\(100\)を定めて置いて、\(57\)がある場合、その補数は\(43\)になります。

一般的には減基数の補数と、基数の補数の2パターンがあります。

減基数の補数足しても桁上がりしない数のうち最大の数

基数の補数足すと桁上がりする数のうち最小の数となります。

10進法における9の補数、10の補数

2進法の補数に入る前に、普段から慣れ親しんでいる10進法での補数で練習しましょう。

10進法は基数が\(10\)となるので減基数はそこから\(1\)を引いて\(9\)になります。

9の補数

まずは減基数である9の補数についてです。

減基数は足しても桁上がりしない数のうち最大の数でしたね。

例えば\(3\)に足して桁上がりしない(=1桁のままの)最大の数は\(6\)になります。

\[3 + 6 = 9\]
\(36\)の場合は足して桁上がりしない(=2桁のままの)最大の数は\(63\)になります。

\[36 + 63 = 99\]

\(365\)の場合は足して桁上がりしない(=3桁のままの)最大の数は\(634\)になります。

\[365 + 634 = 999\]

このようにして結果を見ると、各桁に減基数である9が並んでいることが分かりますね。

10の補数

次に基数である10の補数についてです。

減基数は足すと桁上がりする数のうち最小の数でしたね。

例えば\(3\)に足して桁上がりする(=2桁になる)最小の数は\(7\)になります。

\[3 + 7 = 10\]
\(36\)の場合は足して桁上がりする(=3桁になる)最小の数は\(64\)になります。

\[36 + 64 = 100\]

\(365\)の場合は足して桁上がりしない(=3桁のままの)最小の数は\(635\)になります。

\[365 + 635 = 1000\]

このようにして結果を見ると、足した後の結果が\(10^{x}\)の形であらわされることが分かります。

また、先ほどの9の補数に1加えると10の補数になる点もチェックです。

2進法における1の補数、2の補数

では本題の2進数に入りましょう。

まずは簡単な1の補数から触れていきます

1の補数

減基数である1の補数についてです。

10進数における9の補数の場合、足すと\(999・・・9\)になりました。

従って2進数における1の補数の場合、足すと\(111・・・1\)になる値を求めることになります。

実際にやってみましょう。

例えば\(10\)に足して桁上がりしない最大の値は\(01\)になります。

\[10 + 01 = 11\]

\(1010\)に足して桁上がりしない最大の値は\(0101\)になります。

\[1010 + 0101 = 1111\]

\(101001\)に足して桁上がりしない最大の値は\(010110\)になります。

\[101001 + 010110 = 111111\]

こうしてみるとある事に気付くはずです。

それは1の補数の場合、0と1を反転させるだけで良いということですね。

2の補数

次に基数である2の補数を見てみます。

2の補数の場合、10進数の時の要領で考えると、ある数に補数を加えた結果が\(2^{x}\)の形になれば良い事になります。

\(2^{x}\)は2進数であらわすと\(1000・・・0\)になるので、それを踏まえながら見て行きましょう。

\(10\)に足して桁上がりする最小の値は\(10\)になります。

\[10 + 10 = 100\]

\(1010\)に足して桁上がりする最小の値は\(0110\)になります。

\[1010 + 0110 = 10000\]

\(101001\)に足して桁上がりする最小の値は\(010111\)になります。

\[101001 + 010111 = 1000000\]

これだけでは分かり辛いですが、10進数の場合9の補数に1加えると10の補数になったことを思い出しましょう。

2進数でも同じで、実は1の補数に1加えることで2の補数になっていることが分かります。

補数表現によるメリット

補数表現ができるとどうなるの?と言ったところですが、補数は負号を使わずに足し算だけで引き算ができるという利点があります。

チョロ
チュチュ?(足し算なのに引き算ってどういうことでチュ?)

例えば\(2018 – 26 = 1992\)と言う計算をしたいと思います。

しかし、引き算という概念がなかった場合、-の記号は使えません。そんな時に役に立つのが補数になります。

4桁の計算をしているので、基数は\(10^{4}=10000\)となり、\(26\)の\(10000\)の補数は\(9974\)となります。

次に\(2018\)から\(26\)を引く代わりに、この\(9974\)を足してみましょう。

\[2018 + 26 = 11992\]

結果の\(11992\)から最上位の\(1\)を取り除くと、求めたかった\(1992\)が得られますね。

まとめ

今回は補数表現に関する考えをまとめました。

チョロ
チュ~?(でもなんでわざわざ-を使わずに計算するでチュ?)

キュー
それはな、コンピュータでは0と1を使った計算をするんやけどコンピュータは足し算は得意でも引き算は苦手なんや。
だから無理やり足し算の形にもっていって計算を早くしてるわけやな。

補数は特にプログラミングコンピュータアーキテクトを学ぶ上でよく使う概念なので、そちらの道で働きたい方はマスターしておきましょう。

スポンサーリンク

投稿者: TS

ゲームと数学のことを主に書いてます! アドバイスやご指摘があれば是非お願いします!!

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

CAPTCHA