【真面目版】コンピュータの負の数表現|2の補数・1の補数・符号ビットをやさしく解説

目次

はじめに

幽灯子/基本情報技術者副専門官

私たちが日常で使う数字には「マイナス記号(−)」があります。−5、−100……簡単ですよね。でも、コンピュータの世界には 0と1しかありません。マイナス記号なんて存在しないのです。

では、コンピュータはどうやって「負の数」を扱っているのでしょうか? この記事では、その仕組みを 3つの方法 に分けて、できるだけやさしく解説します。


まず前提:2進数ってなに?

幽灯子/基本情報技術者副専門官

私たちが普段使っている数字は 10進数(0〜9の10種類)です。一方、コンピュータは電気のON/OFFで動くため、0と1の2種類だけ で数を表します。これが2進数です。

10進数2進数(4桁)
00000
10001
50101
70111
151111

ここまでは正の数(プラスの数)だけの話。では、マイナスはどうするのでしょう?


方法① 符号ビット方式(素朴なアイデア)

幽灯子/基本情報技術者副専門官

考え方は一番左のビットを「符号」に使う

これは最もシンプルな発想です。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 → +0
  • 1000 → −0

プラスのゼロとマイナスのゼロ。数学的にはどちらも同じ「0」なのに、表現が2つあるのは無駄ですし、計算のときにややこしくなります。さらに、この方式では 足し算がそのままではうまくいきません。コンピュータにとって計算が面倒になるのです。


方法② 1の補数(もう少し賢いアイデア)

幽灯子/基本情報技術者副専門官

考え方は全ビットをひっくり返して負の数にする

正の数のすべてのビットを反転(0→1、1→0)させると、それが負の数になる、という方式です。

正の数(+5)→ 反転 →負の数(−5)
01011010
正の数(+3)→ 反転 →負の数(−3)
00111100

符号ビット方式(一般的には『符号付き絶対値』と呼ばれる方式)よりは計算しやすくなりますが、残念ながら ゼロが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進数
00000
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のビット反転が起きているんだな」と思い出してみてください。ちょっとだけ、コンピュータが身近に感じられるかもしれません。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

ITTIのアバター ITTI 運営長

ITTI運営長
調べものと学ぶことが止められなくなり、現在は以下の4ブログを運営中:
・DXブログ(今ここ!)
・CODEブログ
・INFRAブログ
・XRブログ

保有資格:ITパスポート
目標資格:情報処理安全確保支援士(学ぶこと多すぎて道のりは遠いですが、毎日コツコツ進めています…泣)

ブログでは、実務経験と最新技術を掛け合わせて、読者の「わかりにくい」を「わかる!」に変える記事を発信中!
最終目標は、これらの知識を活かして「ドラえもんのような万能AI」を開発すること(AIを副運営長任命が待ち遠しい!)。
DX・CODE・INFRA・XRに興味ある方、気軽にX(@llEqmDGOYZ4258)でDMください。一緒に学びましょう!

公務員のキャラがDXを解説!?パロディのブログ『ITTI DX』、発信中!

ITTI DXは企業の安心と持続をサポートするDXを特化したブログ

コメント

コメントする

CAPTCHA


目次