2進・8進・10進・16進、すべての記数法に共通する「桁ごとに重みがある」という仕組みを一枚絵で整理します。基数のべき乗が桁の重みになるという本質さえ掴めば、基数変換は単純な計算になります。
桁の重みとは、各桁が表す値の倍率のことです。たとえば10進数の「1790」は、千の位に1、百の位に7、十の位に9、一の位に0を置いて、それぞれを桁の重み(1000, 100, 10, 1)と掛けて足したものです。
1×1000 + 7×100 + 9×10 + 0×1 = 1790
これは普段意識せずに使っている計算ですが、「同じ数字でも置く位置によって表す量が変わる」という仕組み(位取り記数法)の核心です。2進数も8進数も16進数も、同じ仕組みで動いています。
上の図解で、各記数法の桁ボックスを見比べてください。右端の桁は必ず「1」(基数の0乗)で、左に進むごとに基数が掛けられて重みが大きくなります。
桁の重みは、「基数」をそのままべき乗したものになります。基数とは「使う記号の種類数」のことで、これが記数法を決める要素です。
・2進数の基数は2 → 重みは 2⁰, 2¹, 2², 2³ = 1, 2, 4, 8
・8進数の基数は8 → 重みは 8⁰, 8¹, 8², 8³ = 1, 8, 64, 512
・10進数の基数は10 → 重みは 10⁰, 10¹, 10², 10³ = 1, 10, 100, 1000
・16進数の基数は16 → 重みは 16⁰, 16¹, 16², 16³ = 1, 16, 256, 4096
右端の桁の重みは必ず「1」になります。これは n⁰ = 1(任意の数の0乗は1)という数学の決まりからきています。一見不思議に見えますが、桁の重みが基数のべき乗だと考えれば自然な結果です。
身近な例で考えると、距離の単位に似ています。1km = 1000m、1m = 100cm、1cm = 10mm のように、「単位の刻み」を変えることで同じ量を異なる桁数で表せます。記数法も同じで、基数を変えることで「数の刻み」が変わり、同じ量を異なる表現で書けるのです。
基数変換の問題は、結局のところ「桁の重みを足し合わせるだけ」です。たとえば2進数を10進数に変換するときは、各ビットが1である桁の重みをすべて足せば答えになります。
・2進数 10110011
・桁の重み:128, 64, 32, 16, 8, 4, 2, 1
・1の位置の重みだけ拾う:128 + 32 + 16 + 2 + 1 = 179
逆に10進数から別の基数へ変換するときは、「重みの大きい桁から、その値が入る最大の数を当てはめていく」方法を使います。これは「割り算法」とも呼ばれ、基数で割って余りを記録するという形でも説明されます。仕組みはどちらも同じで、桁の重みを使った分解です。
重要なのは「2の各べき乗を瞬時に思い出せる」ことです。
・2⁰=1, 2¹=2, 2²=4, 2³=8, 2⁴=16, 2⁵=32, 2⁶=64, 2⁷=128, 2⁸=256
・2¹⁰=1024 (約1K), 2²⁰=約1M, 2³⁰=約1G
これらの値は、メモリサイズ・ビット数・基数変換のあらゆる場面で繰り返し使われます。