反転+1を使わない!2の補数を直感的に読む方法

広告

2の補数で表現された負の数を見ると、多くの教科書では

「ビットを反転して1を足す」

という手順で10進数へ変換する方法が紹介されています。

もちろん、この方法は正しく、試験でも役立ちます。

しかし、慣れてくると毎回「反転→+1」を行うのは少し面倒です。

実は、もっと直感的に読める方法があります。


最上位ビットだけ「マイナスの重み」を持つ

8ビットの2の補数では、各ビットの重みは次のようになります。

ビット位置7(符号)6543210
重み-1286432168421

ポイントは一つだけです。

最上位ビットだけが「-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. ビットを反転する
  2. 1を足す
  3. 10進数へ変換する

という3段階の作業が必要です。

一方、この方法なら

「立っているビットの重みをそのまま足すだけ」

です。

慣れてしまえば、暗算でもかなり速く計算できます。


正の数も同じ考え方

例えば

00101100

なら

32 + 8 + 4
=44

になります。

つまり、

  • 最上位ビットが0なら普通の2進数
  • 最上位ビットが1なら、そのビットだけ負の重みになる

というだけです。


この方法のメリット

  • 反転や+1が不要
  • 途中計算が少ない
  • 暗算しやすい
  • ビットの意味を理解しやすい

特にCPUの内部表現を理解するときには、「最上位ビットだけ負の重みを持つ」と考える方が、2の補数の仕組みを自然に理解できます。


初学者へのアドバイス

試験対策では「反転+1」の方法を覚えておくことは大切です。

しかし、仕組みを理解する段階では、

「最上位ビットだけマイナスの重みを持つ」

という考え方を知っておくと、2の補数がぐっと身近になります。

「11010000 を見た瞬間に『-128 + 64 + 16だから -48だ』と読める」

ようになれば、2の補数への苦手意識もかなり減るでしょう。

この内容は、前回作成した「算術左シフト」の記事の後半に「コラム:反転+1を使わない読み方」として差し込むと、初学者にとって理解がさらに深まる構成になります。

訪問数 9 回, 今日の訪問数 9回

広告