2進数→8進数 変換ツールとは?
このツールは、2進数(基数2、0と1の数字だけを使う表記)で書かれた数値を、8進数(基数8、0〜7の数字を使う表記)へ変換します。8進数は2進数をコンパクトに表せる表記で、2進数3桁がちょうど8進数1桁に対応します。さらに変換結果は10進数(基数10)の値も同時に表示するので、計算が正しいかをすぐに確認できます。
使い方
入力欄に 101110 のような2進数を入力して実行してください。ツールはすべての文字が0または1であることをチェックしたうえで、8進数の値・元の2進数・10進数の値を返します。先頭のゼロも自動で処理されるので、気にする必要はありません。
計算の仕組み
\(2^3 = 8\) であるため、2進数3桁が8進数1桁にちょうど対応します。まず右端から2進数を3ビットずつのグループに区切り、左端のグループが足りない場合はゼロで埋めます。各グループは $$ d = 4 \cdot b_2 + 2 \cdot b_1 + b_0 $$ で変換し、0〜7の値が得られます。これらの数字をつなげれば、8進数の完成です。
一般的には次のように表せます。
$$ \text{Octal} = \left( \text{Binary}_2 \right)_{2 \to 8} $$ $$ \begin{gathered} \text{Octal}_8 = \sum_{i=0}^{k-1} g_i \cdot 8^{\,i} \\[1.5em] \text{where}\quad \left\{ \begin{aligned} \text{Binary} &= b_{n-1}b_{n-2}\cdots b_1 b_0 \;(\text{base }2) \\ g_i &= 4b_{3i+2} + 2b_{3i+1} + b_{3i} \\ k &= \lceil n/3 \rceil \text{ groups of 3 bits} \end{aligned} \right. \end{gathered} $$
具体例
101110 を例にします。右端から3桁ずつに区切ると 101 と 110 になります。最初のグループは \( 4 \cdot 1 + 2 \cdot 0 + 1 \cdot 0 = 5 \)、2番目は \( 4 \cdot 1 + 2 \cdot 1 + 1 \cdot 0 = 6 \)。したがって8進数の結果は 56 です。確認のため10進数で計算すると \( 32 + 8 + 4 + 2 = 46 \) となります。
2進法から8進法への グループ変換表
2進法から8進法への変換が機能する理由は \(8 = 2^3\) だからです。各8進数字は正確に3つの2進数字(3つ組)に対応しています。変換するには、2進数を右から3ビットのグループに分割し、左端のグループに必要に応じて先頭ゼロを補充し、各3つ組を下の単一の8進数字に置き換えます。
| 3ビット2進法(3つ組) | 8進数字 | 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 |
各3つ組は位置値 \(4,\ 2,\ 1\)(すなわち \(2^2, 2^1, 2^0\))で読まれます。例えば、\(101_2 = 1\times4 + 0\times2 + 1\times1 = 5\) となり、8進数字 \(5\) が得られます。
その他の解説例
例1:\(11_2\) → 8進法
右から3ビットの3つ組にグループ分けし、左をゼロで補充します:\(11 \to 011\)。
$$011_2 = 0\times4 + 1\times2 + 1\times1 = 3$$
したがって \(11_2 = \)3\(_8\)。その10進数値も 3 です。
例2:\(11010110_2\) → 8進法
右から3つ組に分割します。左端のグループにはゼロを補充します:\(11\,010\,110 \to 011\,010\,110\)。
| 3つ組 | 011 | 010 | 110 |
|---|---|---|---|
| 8進数字 | 3 | 2 | 6 |
左から右に数字を読むと \(11010110_2 = \)326\(_8\)。10進数値ではこの2進数は 214 と等しいです。
例3:より長い文字列 \(101110011001_2\)
これは12ビットで、すでに3の倍数なので、補充は必要ありません。右からグループ分けします:
| 3つ組 | 101 | 110 | 011 | 001 |
|---|---|---|---|---|
| 8進数字 | 5 | 6 | 3 | 1 |
したがって \(101110011001_2 = \)5631\(_8\)。同じ値を10進法で確認すると 2969 です。
よくある質問
なぜ3桁ずつ区切るのですか? \(8 = 2^3\) なので、8進数の1桁はちょうど2進数3ビット分を表します。そのため、変換は情報を失わないきれいな区切り直しになります。
桁数が3の倍数でない場合は? 左側をゼロで埋めて調整します。これによって値が変わることはありません。
小数点は入力できますか? このツールは整数の2進数のみに対応しています。小数部分があれば、変換前に取り除いてください。