反転+1を使わない!2の補数を直感的に読む方法
2の補数で表現された負の数を見ると、多くの教科書では
「ビットを反転して1を足す」
という手順で10進数へ変換する方法が紹介されています。
もちろん、この方法は正しく、試験でも役立ちます。
しかし、慣れてくると毎回「反転→+1」を行うのは少し面倒です。
実は、もっと直感的に読める方法があります。
最上位ビットだけ「マイナスの重み」を持つ
8ビットの2の補数では、各ビットの重みは次のようになります。
| ビット位置 | 7(符号) | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
|---|---|---|---|---|---|---|---|---|
| 重み | -128 | 64 | 32 | 16 | 8 | 4 | 2 | 1 |
ポイントは一つだけです。
最上位ビットだけが「-128」の重みを持ち、それ以外は普通の2進数と同じです。
例:11010000 を読んでみる
ビット列は次のとおりです。
11010000
各ビットに重みを当てはめます。
1 1 0 1 0 0 0 0
-128 +64 +0 +16 +0 +0 +0 +0
あとは足し算するだけです。
-128 + 64 + 16
= -48
答えは
11010000 = -48
となります。
反転も+1も不要
従来の方法では、
- ビットを反転する
- 1を足す
- 10進数へ変換する
という3段階の作業が必要です。
一方、この方法なら
「立っているビットの重みをそのまま足すだけ」
です。
慣れてしまえば、暗算でもかなり速く計算できます。
正の数も同じ考え方
例えば
00101100
なら
32 + 8 + 4
=44
になります。
つまり、
- 最上位ビットが0なら普通の2進数
- 最上位ビットが1なら、そのビットだけ負の重みになる
というだけです。
この方法のメリット
- 反転や+1が不要
- 途中計算が少ない
- 暗算しやすい
- ビットの意味を理解しやすい
特にCPUの内部表現を理解するときには、「最上位ビットだけ負の重みを持つ」と考える方が、2の補数の仕組みを自然に理解できます。
初学者へのアドバイス
試験対策では「反転+1」の方法を覚えておくことは大切です。
しかし、仕組みを理解する段階では、
「最上位ビットだけマイナスの重みを持つ」
という考え方を知っておくと、2の補数がぐっと身近になります。
「11010000 を見た瞬間に『-128 + 64 + 16だから -48だ』と読める」
ようになれば、2の補数への苦手意識もかなり減るでしょう。
この内容は、前回作成した「算術左シフト」の記事の後半に「コラム:反転+1を使わない読み方」として差し込むと、初学者にとって理解がさらに深まる構成になります。




ディスカッション
コメント一覧
まだ、コメントがありません