8進数の各桁(0〜7)をそのまま3ビットの2進数に展開して連結するだけ。逆方向の「3桁ずつ束ねる」を逆再生する操作です。
8進数 → 2進数は、コンパクトな8進数表記をビット列に展開する操作です。「各桁をそのまま3ビットに展開して連結する」だけで、計算らしい計算がいらない最も楽な変換のひとつ。
例:
・7(8) = 111(2)
・17(8) = 1111(2)(001+111 → 先頭0除去)
・755(8) = 111101101(2)(111+101+101)
この変換が綺麗にできるのは、2³ = 8 という関係のおかげ。「2進3桁=8進1桁」というぴったりの対応があるので、桁ごとの展開だけで済みます。
手順は2つだけです。
・① 各桁を3ビットの2進数に変換(先頭の0は省略しない)
・② 左から順に連結し、必要なら先頭の余分な0を除去
対応表(暗記推奨):
| 8進 | 2進3桁 |
|---|---|
| 0 | 000 |
| 1 | 001 |
| 2 | 010 |
| 3 | 011 |
| 4 | 100 |
| 5 | 101 |
| 6 | 110 |
| 7 | 111 |
「先頭の0は省略しない」のがポイント. たとえば 8進数 17 を変換するとき、1 を「1」ではなく「001」と書かないと、連結したときに「1111」ではなく「1+111=1111」にならず、間違って「1111」ではなく「1+111=連結後 1 → 1+111 = 1111」となります。
・1 → 001
・7 → 111
・連結 001 + 111 = 001111
・先頭の0除去 → 1111
愚直にやれば「各桁を3ビット展開して連結」だけですが、慣れてくるともっと素早く解ける小ワザがいくつかあります。
① 8通りを完全暗記する
8進数は 0〜7 の たった8通りしかありません。各桁を瞬時に3ビットに変換できれば、変換時間がほぼゼロになります。
0 = 000 4 = 100
1 = 001 5 = 101
2 = 010 6 = 110
3 = 011 7 = 111
② UNIX権限の rwx で覚える
3ビットを「読み(r=4)・書き(w=2)・実行(x=1)」の権限ビットとして覚えると、図形的に思い出しやすくなります。
755(8) を2進数に
7 = 111 = rwx
5 = 101 = r-x
5 = 101 = r-x
→ 111 101 101(2)
③ 10進数を経由しない
「8進数→10進数→2進数」のように10進数を挟むと、桁が増えるほど計算が爆発します。8進1桁を直接3ビットに展開する方が圧倒的に速い。
④ 先頭の 0 除去を最後にまとめてやる
各桁を3ビットに展開する段階では必ず3桁ぶん書く。連結し終わってから、左端の余分な0だけを最後に1回除去します。途中で0を省くと境目がずれて、まったく違う値になります。
よく使うパターン:
・755 → 111101101、644 → 110100100
・777 → 111111111(全員rwx)
・600 → 110000000(所有者のみrw)