「2進数が苦手」は才能の問題ではありません。10進数で無意識にやっていることを、 2進数では意識的にやる必要がある — 違いはそれだけです。 この記事では、位取り→基数変換→16進数→2の補数→シフト演算の順に、 手を動かす例題つきで一つずつ壁を越えます。
位取りの正体 — 10進数も2進数も同じルール
325という数を見て「三百二十五」と読めるのは、 桁ごとに重みが決まっているからです。 右から1の位、10の位、100の位。つまり 325 = 3×100 + 2×10 + 5×1 です。
2進数はこの重みが10ずつではなく2ずつ増えるだけです。 右から 1、2、4、8、16…。使える数字が0と1しかないのは、 重みが2倍ずつ増えるので、各桁は「その重みを使うか使わないか」の2択で足りるからです。
2進数 → 10進数: 重みを足すだけ
2進数 1011 を10進数にしてみます。桁の重みは右から 1、2、4、8 です。
1011 = 1×8 + 0×4 + 1×2 + 1×1 = 8 + 0 + 2 + 1 = 11
「1が立っている桁の重みを拾って足す」。やることはこれだけです。 慣れてきたら 1、2、4、8、16、32、64、128 の並びを覚えてしまうと、8桁までは即答できます。
10進数 → 2進数: 2で割って余りを並べる
逆方向は「2で割り続けて、余りを下から読む」です。13を2進数にしてみます。
13 ÷ 2 = 6 余り 1
6 ÷ 2 = 3 余り 0
3 ÷ 2 = 1 余り 1
1 ÷ 2 = 0 余り 1
余りを下から読んで 1101
検算しておきましょう。1101 = 8 + 4 + 0 + 1 = 13。合っています。 この「行って戻って確かめる」1往復を数回やると、変換は作業になります。
16進数は2進数の速記
2進数は桁が長くなりすぎるのが欠点です。そこで4桁ずつまとめて1文字にするのが16進数。 2進数4桁はちょうど0〜15の16通りで、10以上をA〜Fで表します。 たとえば 11111111 は、4桁ずつ区切ると 1111 1111、それぞれ15=Fなので FF。 つまり FF = 15×16 + 15 = 255 です。
「16進数はまったく別の数体系」ではなく「2進数を4桁ずつ束ねた省略記法」と捉えると、 2進⇔16進の変換は区切り直すだけになります。
2の補数 — 引き算を足し算にする発明
コンピュータはマイナスの数を「2の補数」で表します。 仕組みは車のオドメーター(走行距離計)を思い浮かべると分かりやすいです。 0000 から1つ戻すと 9999 になりますよね。 4桁しかない世界では、9999は「-1のふりをした数」として完璧に機能します。 オドメーターが本当に負の距離を表すわけではなく、 「桁が有限だと、1つ戻れば最大値に巻き戻る」という性質だけを借りたたとえです。
2進数4ビットでも同じで、0000 から1つ戻った 1111 が -1、その1つ前の 1110 が -2…と続きます。 ある数の符号を反転する手順は「ビットを全部反転して1を足す」です。
問: 4ビットの2の補数表現で、1011 が表す10進数は?
先頭ビットが1なので負の数。反転すると 0100、1を足して 0101 = 5。
よって 1011 = -5
なぜこんな面倒なことをするのか。引き算の回路を作らずに、足し算の回路だけで引き算ができるからです。 7 - 5 を 7 + (-5) として計算できるのは、ハードウェアにとって大きな節約です。 この論点はそのまま出題されます。 実際の問題で確認してみてください。
シフト演算: ×2 と ÷2 の高速道路
2進数の各桁の重みは2倍ずつなので、全体を左に1桁ずらすと値は2倍になります。 10進数で325を左にずらすと3250(10倍)になるのと同じ理屈です。 右シフトなら半分。「左シフトn回 = 2のn乗倍」はよく出ます。 ただし桁数が固定の世界では、左シフトで先頭ビットがあふれると値が壊れる(オーバーフロー)点も セットで問われます。 もう1つ注意。符号付きの数を右にシフトするときは、 先頭の符号ビットをどう扱うか(0で埋める論理シフトか、符号を保つ算術シフトか)で結果が変わります。 まずは正の数でこの仕組みをつかめば十分です。
頻出ミスまとめ
- 余りを上から読む — 10進→2進の変換は余りを「下から」読みます
- 先頭ビット=符号の確認忘れ — 2の補数の問題は、まず先頭ビットで正負を判定してから変換します
- 「反転して1を足す」の1を忘れる — 1の補数(ただの反転)と2の補数の違いはこの+1です
- 16進のA〜Fの対応があいまい — A=10、F=15。ここが揺れると全部揺れます
このテーマは基礎理論カテゴリで 集中的に演習できます。読んだ直後に5問解くと、手順が手に馴染むはずです。