コンピュータの世界では、二進数でマイナス(負の数)を表現・読み取るために、主に「2の補数(はすごくう)」という仕組みを使っています。
私たちが普段使う十進数では、マイナスを表すときに「-5」のようにマイナス記号($-`)をつけますが、コンピュータは「0」と「1」の電気信号しか扱えないため、記号を使わずにマイナスを表現する工夫が必要です。
「2の補数」を使ったマイナスの読み方と仕組みを、8ビット(1バイト)のデータを例に分かりやすく解説します。
1. 最上位ビット(一番左)でプラス・マイナスを判断する
8ビットの二進数の場合、一番左のビット(最上位ビット)が符号を表す目印になります。
- 一番左が
0= プラス(正の数) - 一番左が
1= マイナス(負の数)
つまり、一番左が
1 から始まっている二進数を見たら、「あ、これはマイナスの数だな」と読み取ります。2. マイナスの二進数を十進数に変換して「読む」手順
例として、二進数
11111011 という数字が与えられたとき、これが十進数でいくつ(何というマイナスの数)なのかを読み解く手順を説明します。- 一番左が
1なので「マイナス」だと確定する。 - すべてのビットを反転させる(0を1に、1を0にする)。
11111011$\rightarrow$00000100
- 反転させた数字に「1」を足す。
00000100+1=00000101
- この「プラスの二進数」を普通の十進数に変換する。
00000101は、十進数で5です。
- 最初に確認したマイナスをつける。
- 答えは
-5と読み取れます。
なぜこんな面倒なことをするのか?(メリット)
「なぜわざわざビットを反転して1を足すようなことをするのか?」というと、コンピュータが「足し算の回路だけで引き算(マイナスの計算)もできるようにするため」です。
もし「一番左をマイナス記号の代わり」と単純に決めてしまうと、「$5 + (-5)$」を計算するときに特別な引き算専用の複雑な回路が必要になってしまいます。
しかし、「2の補数」の仕組みを使えば、コンピュータはプラスの数同士を足すのと同じ回路(加算器)で、そのままマイナスの計算(引き算)を正しく処理できるという巨大なメリットがあります。