【基本情報】2の補数とは?1の補数・符号付き絶対値との違いを初心者向けにやさしく解説!

IT基礎

「11111101 = -3」がよく分からない…

基本情報技術者試験の勉強をしていると、

「8ビットの2の補数表現で 11111101 を10進数にすると?」

という問題がよく出てきます。

「反転して1を足す」と覚えていても、

  • なぜそうするの?
  • 1の補数と何が違うの?
  • そもそも補数って何?

と疑問に感じる人も多いはず。

この記事では、2の補数をやさしく解説します!


2の補数とは?

2の補数とは、

コンピュータで負の数を表す方法

です。

現在のコンピュータでは、ほぼすべて2の補数が使われています。


負の数を表す3つの方法

1. 符号付き絶対値表現

先頭1ビットで符号を表します。

  • 0 → 正の数
  • 1 → 負の数
8ビット表現
+300000011
-310000011

2. 1の補数

すべてのビットを反転します。

8ビット表現
+300000011
-311111100

3. 2の補数

1の補数にさらに1を足します。

8ビット表現
+300000011
-311111101

3種類の比較表

方式-3 の表現
符号付き絶対値10000011
1の補数11111100
2の補数11111101

2の補数の作り方

例:3 を -3 にする

00000011  (3)
11111100 (反転)
11111101 (+1)

2の補数を10進数に戻す方法

例:11111101

  1. 先頭が1 → 負の数
  2. 反転 → 00000010
  3. 1を足す → 00000011
  4. 10進数にすると3
  5. 負の数なので -3

なぜ2の補数が使われるの?

最大の理由は、

0が1種類しかないから


0の表現の違い

方式+0-0
符号付き絶対値0000000010000000
1の補数0000000011111111
2の補数00000000(存在しない)

-0 を作ってみる

00000000
↓ 反転
11111111
↓ +1
1 00000000

左端の桁あふれを捨てると、

00000000

つまり、-0 を作っても +0 と同じになります。


なぜ0が1種類だと便利?

  • 計算回路がシンプル
  • 比較処理が簡単
  • バグが起こりにくい
ハク
ハク

2の補数って、なんで1を足すの?

レイ
レイ

1の補数だけだと0が2種類になってしまいます。1を足すことで0が1つに統一されるのです。

ハク
ハク

なるほど! だから今のコンピュータは2の補数を使ってるんだね!


基本情報で覚えるポイント

  • 2の補数 = 反転して +1
  • 先頭が1なら負の数
  • 2の補数では0が1種類
  • 現在のコンピュータは2の補数を採用

練習問題

問題

8ビットの2の補数表現で 11111110 を10進数にすると?

解き方

  • 反転 → 00000001
  • +1 → 00000010
  • 10進数で2
  • 負の数なので -2

まとめ

2の補数とは、

負の数を表すために、ビットを反転して1を足す方法

です。

そして、

0が1種類しかないため、計算回路がシンプルになる

という大きなメリットがあります。

コメント

タイトルとURLをコピーしました