「11111101 = -3」がよく分からない…
基本情報技術者試験の勉強をしていると、
「8ビットの2の補数表現で
11111101を10進数にすると?」
という問題がよく出てきます。
「反転して1を足す」と覚えていても、
- なぜそうするの?
- 1の補数と何が違うの?
- そもそも補数って何?
と疑問に感じる人も多いはず。
この記事では、2の補数をやさしく解説します!
2の補数とは?
2の補数とは、
コンピュータで負の数を表す方法
です。
現在のコンピュータでは、ほぼすべて2の補数が使われています。
負の数を表す3つの方法
1. 符号付き絶対値表現
先頭1ビットで符号を表します。
- 0 → 正の数
- 1 → 負の数
| 値 | 8ビット表現 |
|---|---|
| +3 | 00000011 |
| -3 | 10000011 |
2. 1の補数
すべてのビットを反転します。
| 値 | 8ビット表現 |
|---|---|
| +3 | 00000011 |
| -3 | 11111100 |
3. 2の補数
1の補数にさらに1を足します。
| 値 | 8ビット表現 |
|---|---|
| +3 | 00000011 |
| -3 | 11111101 |
3種類の比較表
| 方式 | -3 の表現 |
|---|---|
| 符号付き絶対値 | 10000011 |
| 1の補数 | 11111100 |
| 2の補数 | 11111101 |
2の補数の作り方
例:3 を -3 にする
00000011 (3)
11111100 (反転)
11111101 (+1)
2の補数を10進数に戻す方法
例:11111101
- 先頭が1 → 負の数
- 反転 →
00000010 - 1を足す →
00000011 - 10進数にすると3
- 負の数なので -3
なぜ2の補数が使われるの?
最大の理由は、
0が1種類しかないから
0の表現の違い
| 方式 | +0 | -0 |
|---|---|---|
| 符号付き絶対値 | 00000000 | 10000000 |
| 1の補数 | 00000000 | 11111111 |
| 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種類しかないため、計算回路がシンプルになる
という大きなメリットがあります。


コメント