8進数(ハッシュウスウ)とは | 意味や読み方など丁寧でわかりやすい用語解説
8進数(ハッシュウスウ)の意味や読み方など、初心者にもわかりやすいように丁寧に解説しています。
読み方
日本語表記
八進数 (ハッシンスウ)
英語表記
octal (オクタル)
用語解説
「8進数」は、私たちが普段使用する10進数とは異なる数の表現方法の一つである。システムエンジニアを目指す上で、コンピュータが内部でどのように数値を扱っているかを理解することは非常に重要であり、8進数はその理解を深めるための一助となる。
概要として、8進数とは基数を8とする記数法である。これは0から7までの8種類の数字を使って数を表現する方法を意味する。私たちが日常で使う10進数は0から9までの10種類の数字を使用し、基数が10である。コンピュータの内部では、すべての情報が電気信号のオンとオフ、つまり0と1で表現される2進数で処理される。しかし、2進数は桁数が非常に長くなりがちで、人間が直接読み書きするには非常に手間がかかり、間違いも起こしやすい。そこで、人間が2進数を扱いやすくするための中間的な表現方法として、8進数や16進数が利用される。8進数が選ばれる主な理由は、2進数3桁が8進数1桁に正確に対応するため、2進数との変換が非常に容易である点にある。この特性から、特にUNIXやLinuxシステムにおけるファイルパーミッション(ファイルの読み書き実行権限)の設定など、特定の分野で現在でも活用されている。
詳細に入ると、8進数の仕組みは「位取り記数法」に基づいている。これは、数字の並びにおける各桁の位置によってその値が決まる方式である。8進数では、右端の桁が8の0乗(つまり1)の位、その左隣が8の1乗(つまり8)の位、さらにその左が8の2乗(つまり64)の位というように、左に行くほど8のべき乗を乗じた位となる。例えば、8進数の「123」という数値は、10進数に変換すると、(1 × 8^2) + (2 × 8^1) + (3 × 8^0) = (1 × 64) + (2 × 8) + (3 × 1) = 64 + 16 + 3 = 83 となる。このように、8進数は10進数とは異なる数の数え方をするが、その根本的な仕組みは共通している。
8進数が特にコンピュータの世界で利用される理由の核心は、2進数との密接な関係にある。コンピュータの基本は0と1だけで表現される2進数である。8という数字は2の3乗であるため、8進数1桁は正確に2進数3桁で表現できる。例えば、8進数の「0」は2進数の「000」に、「1」は「001」に、「7」は「111」に対応する。この単純な対応関係により、長い2進数の羅列を、人間にとってより短く、視覚的に把握しやすい8進数に変換することが非常に容易になる。例えば、2進数の「001010011」という並びがあった場合、これを3桁ずつ区切ると「001」「010」「011」となり、それぞれが8進数の「1」「2」「3」に対応するため、全体として8進数の「123」と即座に変換できる。この変換のしやすさが、人間がコンピュータの低レベルな情報を扱う際に、8進数を利用する大きなメリットであった。
8進数を10進数に変換する方法は上述の通りだが、逆に10進数を8進数に変換するには、「割り算と余り」を用いる方法が一般的である。変換したい10進数を8で割り、その余りを記録する。次に、その商を再び8で割り、余りを記録する。この操作を商が0になるまで繰り返し、最後に記録した余りを逆順に並べると、それが8進数表記となる。例えば、10進数の83を8進数に変換する場合、83 ÷ 8 = 10 余り 3、10 ÷ 8 = 1 余り 2、1 ÷ 8 = 0 余り 1 となる。余りを逆順に並べると123となり、8進数の123が得られる。
現代のシステムエンジニアにとって、8進数が最も身近に現れる場面の一つが、UNIXやLinuxオペレーティングシステムにおける「ファイルパーミッション」の設定である。ファイルやディレクトリには、その所有者、所有者が属するグループ、そしてその他のユーザーに対して、それぞれ「読み取り(read: r)」「書き込み(write: w)」「実行(execute: x)」の3種類の権限を設定できる。これらの権限はそれぞれ数値で表現され、読み取りが4、書き込みが2、実行が1と定義されている。これらの数値を組み合わせることで、特定の権限セットを表現できる。例えば、読み取りと書き込みの権限があれば 4+2=6、全ての権限があれば 4+2+1=7 となる。これらの数値は、ちょうど8進数の1桁で表現できる範囲(0から7)に収まる。したがって、所有者、グループ、その他のユーザーの3者に対して、それぞれ8進数1桁の権限数値を割り当てることで、合計3桁の8進数でファイルやディレクトリの権限全体を簡潔に表現できる。例えば、「755」という8進数のパーミッションは、所有者にはすべての権限(rwx)、グループには読み取りと実行権限(r-x)、その他のユーザーにも読み取りと実行権限(r-x)を与えることを意味する。
また、プログラミング言語の中には、8進数を直接コード中に記述するための記法を提供するものも多い。例えば、C言語やPythonなどでは、数値リテラルの先頭に「0」(ゼロ)を付けることで、その数値が8進数であることを示す規則がある。例えば「0123」と書かれた数値は、10進数の123ではなく、8進数の123(すなわち10進数の83)として解釈される。このため、プログラミングを行う際には、意図しない8進数解釈によるバグを防ぐために注意が必要である。
現代のIT分野では、より多くの情報を効率的に扱うために16進数が広く利用されることが多い。16進数は2進数4桁が16進数1桁に対応するため、より大きな2進数の塊を短い桁数で表現できる利点がある。しかし、8進数には2進数3桁という、より小さなグループで区切られることで、ビット単位での権限管理や、特定のレジスタのビットフラグのような、きめ細やかな情報表現に適しているという側面も依然として存在する。特にUNIX/Linuxのファイルパーミッションのように、特定の意味を持つ3つのビット(r, w, x)をグループとして扱う場合に、8進数は非常に直感的で自然な表現方法となるのである。このように8進数は、かつてメインフレームなどで12ビットや24ビットといったワード長を持つシステムでの記憶番地指定に用いられた歴史的背景を持ちつつも、現在でも特定のニッチな、しかし重要な分野でその価値を発揮し続けている。システムエンジニアにとって、様々な進数表記とその使われ方を理解することは、システムの内部動作を深く理解し、効率的な開発や運用を行う上で不可欠な知識である。