2進数 → 16進数では「4桁ずつ」束ねますが、2進数 → 8進数では「3桁ずつ」束ねます。2³=8 だから、2進3桁が8進1桁にちょうど対応します。
2進数 → 8進数は、長い 0/1 の並びを 0〜7 の短い表記に圧縮する変換です。桁数が 約1/3に圧縮されるので、読みやすくなります。
たとえば111101101(9桁)を8進数にすると755(3桁)。UNIX のファイル権限 chmod 755 はまさに2進数の rwx の組み合わせから出てきた8進数表記です。
なぜきれいに変換できるかというと、「2進3桁 = 8進1桁」という綺麗な対応があるためです。2³ = 8 なので、2進3桁で表せる組み合わせ(8通り)がちょうど8進1桁(0〜7)と一致します。
なぜ「2桁」でも「4桁」でもなく、ちょうど「3桁」で区切るのでしょうか。その答えは2³ = 8 という単純な等式にあります。
2進3桁で表せる組み合わせは「ちょうど8通り」です。
・000, 001, 010, 011, 100, 101, 110, 111
これが 0〜7 の 8進1桁とぴったり一対一対応するため、グループ単位で機械的に置き換えるだけで変換が成立します。
2進3桁 ↔ 8進1桁
000 = 0 100 = 4
001 = 1 101 = 5
010 = 2 110 = 6
011 = 3 111 = 7
もし他の桁数だったら?
・2桁ずつだと 2² = 4 通り → 4進数になる(8進数にならない)
・4桁ずつだと 2⁴ = 16 通り → 16進数になる
つまり「束ねる桁数 = log₂(基数)」の関係。これを覚えておくと、何進数→何進数でも応用できます。
なぜ「右から」なのか? 数の桁の重みは右端が一番低く、左に行くほど高くなります。8進1桁ぶん = 2進3桁ぶんの重みなので、右端から3桁単位で区切ると桁の境目が一致します。左端から区切ると、最下位の重みが揃わず計算が破綻します。
実際の変換は3ステップだけです。順番を守れば誰でもミスなく解けます。
・① 右端から3桁ずつグループ化
・② 左端が3桁未満なら左に 0 を補って3桁に揃える
・③ 各グループを 0〜7 の1文字に変換して左から並べる
例1: 111101101 を8進数に変換
右から3桁ずつ: 111 | 101 | 101
111 = 4+2+1 = 7
101 = 4+1 = 5
101 = 4+1 = 5
結果: 755(8)
例2: 11010 を8進数に変換(0埋めあり)
右から3桁: 11 | 010 ← 左が2桁
左に0を補う: 011 | 010
各グループ変換: 3, 2
結果: 32(8)
覚えておきたい対応表(8通り):
| 2進3桁 | 8進1桁 | 10進 |
|---|---|---|
| 000 | 0 | 0 |
| 001 | 1 | 1 |
| 010 | 2 | 2 |
| 011 | 3 | 3 |
| 100 | 4 | 4 |
| 101 | 5 | 5 |
| 110 | 6 | 6 |
| 111 | 7 | 7 |
よくあるミス:
・左から区切ってしまう(右からが正解。桁の重みが揃わない)
・0埋めを忘れる(11010 を「11|010」のまま変換すると、3 ではなく桁数が合わなくなる)
・10進数の感覚で「8」を書く(8進1桁の最大は 7、8 は出てこない)
UNIX 権限との関係: 3つのビットがそれぞれ「読み(r=4)/書き(w=2)/実行(x=1)」に対応し、その和が8進1桁の値になります。755 → 111 101 101 → rwx r-x r-x。グループ化の威力を最も体感できる実例です。