はじめに
幽灯子/基本情報技術者副専門官私たちが日常で使う数字には「マイナス記号(−)」があります。−5、−100……簡単ですよね。でも、コンピュータの世界には 0と1しかありません。マイナス記号なんて存在しないのです。
では、コンピュータはどうやって「負の数」を扱っているのでしょうか? この記事では、その仕組みを 3つの方法 に分けて、できるだけやさしく解説します。
まず前提:2進数ってなに?





私たちが普段使っている数字は 10進数(0〜9の10種類)です。一方、コンピュータは電気のON/OFFで動くため、0と1の2種類だけ で数を表します。これが2進数です。
| 10進数 | 2進数(4桁) |
|---|---|
| 0 | 0000 |
| 1 | 0001 |
| 5 | 0101 |
| 7 | 0111 |
| 15 | 1111 |
ここまでは正の数(プラスの数)だけの話。では、マイナスはどうするのでしょう?
方法① 符号ビット方式(素朴なアイデア)



考え方は一番左のビットを「符号」に使う
これは最もシンプルな発想です。4桁の2進数なら、一番左(最上位ビット)を「符号」専用にします。
0→ プラス(+)1→ マイナス(−)
残りの3桁で数の大きさを表します。
| 2進数 | 意味 | 10進数 |
|---|---|---|
| 0 101 | +5 | +5 |
| 1 101 | −5 | −5 |
| 0 011 | +3 | +3 |
| 1 011 | −3 | −3 |
わかりやすい! ……のですが、実はこの方式には困った問題があります。
問題点:ゼロが2つできてしまう
0000→ +01000→ −0
プラスのゼロとマイナスのゼロ。数学的にはどちらも同じ「0」なのに、表現が2つあるのは無駄ですし、計算のときにややこしくなります。さらに、この方式では 足し算がそのままではうまくいきません。コンピュータにとって計算が面倒になるのです。
方法② 1の補数(もう少し賢いアイデア)





考え方は全ビットをひっくり返して負の数にする
正の数のすべてのビットを反転(0→1、1→0)させると、それが負の数になる、という方式です。
| 正の数(+5) | → 反転 → | 負の数(−5) |
|---|---|---|
| 0101 | → | 1010 |
| 正の数(+3) | → 反転 → | 負の数(−3) |
|---|---|---|
| 0011 | → | 1100 |
符号ビット方式(一般的には『符号付き絶対値』と呼ばれる方式)よりは計算しやすくなりますが、残念ながら ゼロが2つ問題 はまだ解決しません(0000 = +0、1111 = −0)。
方法③ 2の補数(現代のコンピュータが使う方法)



考え方は全ビットを反転して、さらに1を足す!
これが、現在ほぼすべてのコンピュータで採用されている方式です。手順はたった2ステップ。
−5を作ってみよう(4ビットの場合)
ステップ1:+5 の2進数を書く → 0101
ステップ2:全ビットを反転する → 1010
ステップ3:1を足す → 1011 ← これが「−5」!
−3を作ってみよう
+3 → 0011
反転 → 1100
+1 → 1101 ← これが「−3」!
4ビットで表せる数の一覧
| 2進数 | 10進数 |
|---|---|
| 0000 | 0 |
| 0001 | +1 |
| 0010 | +2 |
| 0011 | +3 |
| 0100 | +4 |
| 0101 | +5 |
| 0110 | +6 |
| 0111 | +7 |
| 1000 | −8 |
| 1001 | −7 |
| 1010 | −6 |
| 1011 | −5 |
| 1100 | −4 |
| 1101 | −3 |
| 1110 | −2 |
| 1111 | −1 |
2の補数のすごいところ
① ゼロが1つだけ。 0000 だけがゼロです。−0は存在しません。
② 足し算がそのまま使える。 これが最大のメリットです。実際に確かめてみましょう。
3 + (−5) = −2 を計算してみる
0011 (+3)
+ 1011 (−5)
------
1110 (−2) ← 正解!
普通に足し算するだけで、正しい答えが出ます。コンピュータは「足し算の回路」さえ持っていれば、引き算も負の数の計算もできるわけです。これはハードウェア設計を大幅にシンプルにしてくれます。
③ 一番左のビットを見れば正負がわかる。 0 で始まれば正、1 で始まれば負。これは符号ビット方式と同じ利点です。
なぜ「2の補数」が勝ち残ったのか?



3つの方式を比べると、答えは明確です。
| 特徴 | 符号ビット | 1の補数 | 2の補数 |
|---|---|---|---|
| わかりやすさ | ◎ | ○ | △ |
| ゼロは1つだけ? | ✕ | ✕ | ◎ |
| 足し算がそのまま使える? | ✕ | △ | ◎ |
| 計算回路がシンプル? | ✕ | △ | ◎ |
人間にとっての「わかりやすさ」よりも、コンピュータにとっての「計算のしやすさ」が優先された結果、2の補数が世界標準になりました。
日常生活でのたとえ





2の補数は、時計に似ています。12時間制の時計で「10時の3時間前」を求めるとき、私たちは「10 − 3 = 7時」と計算します。でも、時計の針を 前に9時間進めても 同じ7時に到着しますよね(10 + 9 = 19 → 12を超えた分の7)。
つまり「3を引く」ことと「9を足す」ことが同じ結果になる。2の補数も同じ原理で、引き算を足し算に変換 しているのです。
まとめ
- コンピュータには「−」記号がないので、0と1だけで負の数を表す工夫が必要
- 歴史的に3つの方法が考えられたが、2の補数 が最も優れている
- 2の補数は「ビットを反転して1を足す」だけのシンプルなルール
- 最大のメリットは 足し算の回路だけで引き算もできる こと
- 現在のパソコン、スマホ、ゲーム機……ほぼすべてのコンピュータがこの方式を採用している



次にパソコンやスマホで計算するとき、「中では0と1のビット反転が起きているんだな」と思い出してみてください。ちょっとだけ、コンピュータが身近に感じられるかもしれません。










コメント