2進数で負(マイナス)の数を表す補数とは?求め方は?

ここでは、2進数で負(マイナス)の数を表す方法である補数とは何なのか、そして、その補数の求め方を解説します。

コンピュータの中で使われる2進数では、10進数で負の数を表すときに使うような「ー(マイナス)」の記号を使うことはできません。

もちろん「+(プラス)」の記号も使うことができません。

つまり、10進数の「-3」を、2進数で「-0011」としたり、「+3」を、「+0011」と表すことはコンピュータにはできないということです。

そこで、2進数で負の数を表す方法を解説します。

先頭のケタで負の数を表す方法

一番簡単に考えられる方法は、一番先頭のケタ(ビット)で「+(プラス)」と「-(マイナス)」を表現する方法です。

一番先頭のケタが「0」ならばプラスで、「1」ならばマイナスと決めてしまうのです。

例えば、10進数の「+3」は2進数で、そのまま「0011」として、「-3」は、「1011」とします。

0011」 → 先頭のビットが「0」なのでプラスと考える
1011」 → 先頭のビットが「1」なのでマイナスと考える

このように、先頭のビットでプラスとマイナスを表現します。

これを「絶対値表現」と言いますが、実は現代のコンピュータではこの表現方法を使用していることはほぼなく、以下で解説する補数という考え方を使って表現しています。

なぜ補数を使うかというと、コンピュータが計算をするときに内部では、引き算を使わずに、引き算を足し算にして計算をしているからです。

私たちが初めて習う四則演算(足し算、引き算、かけ算、割り算)も、まず足し算から始まって、十分に足し算ができるようになってから引き算を習いますが、引き算は少し頭を使わないと難しいので、コンピュータとしては、あまり頭を使わずに済むように、引き算であっても足し算として計算をしています。コンピュータは頭がいいと思っていると少し驚きですね。

補数を使う方法

それでは、引き算を足し算として計算するときに使われる補数を解説します。

しかし、いきなり使い慣れない2進数で考えると難しいと思いますので、まずは10進数で補数の考え方を解説していきます。

補数とは、負の数を、正の数として表現する方法です。
マイナスの数であっても、プラスの数としてしまおうという考え方なのです。

例えば、正の整数である「+45」は、同じ負の整数である「-45」を引けばゼロになります。

+45 – 45 = 0

それでは、このように、計算をしたら「0」になるように、引き算ではなく、足し算で行おうとするとどうなるでしょうか。

+45 + ? = 0

となる計算をするわけです。
ここで表れるのが補数という考え方です。

補数を使って足し算するときには、足し算をしたときに、ケタ上がりしたケタを無視するという方法を使います。「45」は2ケタの数ですので、3ケタ目を無視するということです。

つまり、「45 + ? = 100」となる計算をすればよいということです。実際に計算してみましょう。

答えは「55」です。実際に「45  +  55 = 100」となり、3ケタ目を無視すれば、「0」になるので、「45 + ( -45) = 0」であることが分かります。

45 + 55 = 100 → ケタ上がりした3ケタ目を無視すると「0」になる。

つまり、この「55」が「-45」を表す補数ということになります。

2進数の補数の求め方

2進数でも補数の考え方は同じです。上で例をあげた、「45 + 55 = 0」を2進数で考えてみましょう。

ちなみに、2進数での補数の求め方ですが、「1の補数」と「2の補数」があるのですが、一般的によく使われているのは「2の補数」なので、「2の補数」を使って解説します。

「-45」の2の補数の求め方

上で解説したように、「-45」を補数にすると「+55」になりますが、筆算で計算するには2進数は少々難しいので、簡単に2進数の補数を求める方法を以下に以下に解説します。

①10進数の「45」を2進数にする。
 
45 = 101101
 
②「1」と「0」を全てひっくり返す。
 
1 0 1 1 0 1
0 1 0 0 1 0
 
※ 単純に「1」を「0」に、「0」を「1」に何も考えずにひっくり返すだけです。
 
③「1」を足す

このように「-45」の2の補数は「010011」ということが分かります。

最後に答え合わせとして、ケタ上がりしたケタを無視して、答えが「0」になるか確認しましょう。

答えは、「1000000」ですが、一番上のケタを無視しますので、答えは「000000」となり、しっかりと「0」になっていますので、しっかりと補数が求められたことがわかります。

1000000 = 000000 → ケタ上がりした7ケタ目を無視する