8進法とは、8法のことです。0から7までの数字(桁)を使って数を表します。これは2進法(ベース2)や16進法(ベース16)と同じく位置記数法の一種で、位ごとに8の冪(8^0=1、8^1=8、8^2=64、…)を用います。典型的な表記法には次のようなものがあります:数字の前にoを付けて o04 や o1242 のように書く方法、または 12428 のように右下に小さな8を付けて示す方法です。

定義と基本例

8進法の各桁は0〜7の整数で表され、桁の位置に応じて8の冪を掛けて合計することで10進法の値になります。たとえば、12428 は次のように計算されます:

  • 12428 = 1×8^3 + 2×8^2 + 4×8^1 + 2×8^0 = 512 + 128 + 32 + 2 = 674(10進)

逆に10進数674を8進に直すには8で繰り返し割って余りを求め、下から余りを並べます(674 ÷ 8 = 84 余 2 → 84 ÷ 8 = 10 余 4 → 10 ÷ 8 = 1 余 2 → 1 ÷ 8 = 0 余 1)ので 12428 になります。

2進法との対応(ビットとの関係)

8は2の3乗(2^3)なので、1つの8進数字は3ビットに対応します。これにより2進数と相互変換が簡単です。例:12428 を2進に直すと、各桁を3ビットで表して連結します。

  • 1 → 001、2 → 010、4 → 100、2 → 010
  • したがって 12428 の2進表記は 001010100010 (先頭の不要な0は省略して 1010100010)で、10進の674に対応します。

基本的な算術(例)

8進法同士での加減乗除は10進法と同じ手順ですが、繰り上がりは8で行います。簡単な例:

  • 178 + 68 = (10進で 15 + 6 = 21)→ 21 = 2×8 + 5 → 258

コンピュータでの利用例

かつて8進法は主にコンピュータの分野で広く使われました。特にワード長が3ビットの倍数(たとえば12ビット、24ビットなど)のマシンでは、2進数を3ビットずつ区切って人間が見やすくするのに便利だったためです。代表的な例としては古いミニコンピュータ(PDP-8などの12ビット機)や初期のシステムでの使用が挙げられます。

今日でも8進法が使われる場面はいくつか残っています。主な用途:

  • Unix系のファイルパーミッション表記(chmodで用いる 755、644 などの八進表現)。各桁は読み取り・書き込み・実行のビット集合を表し、0〜7で表現します。
  • 一部のプログラミング言語における数値リテラル(例:伝統的にC言語では先頭が0の数は八進数として扱われることがあり、'\012' のような文字エスケープで八進表記が使われることがある)
  • 過去のアセンブリやディスプレイ、システム管理ツールでの表示や入力

しかし、コンピュータのワード長が24ビット→32ビット→64ビットと拡大し、また4ビット単位で扱いやすい16進法が普及したため、現代では16進法の方が利用頻度が高くなっています。

歴史と文化的背景

8進法は数学や計算機の歴史の中で重要な役割を果たしました。機械的・電子的表示装置の設計や当時のワード長に合致したことから採用されることが多かったためです。

また、文化的な数え方として8進法を使う言語や社会も存在します。元の文でも触れられているように、カリフォルニアのユキメキシコのパメアン語など、ある種の言語グループでは8進的な数え方をすることが報告されています。これは、手の指そのものではなく、指と指の間の空間を数える習慣に由来すると考えられています(指の間の区切りが8個分になるため)。

利点と欠点

  • 利点:2進数と密接に対応する(1桁=3ビット)ため、当時の機械語や低レベルの表示に便利。表記が短くなり、ビット集合の視認性が上がる。
  • 欠点:ワード長が4の倍数(16進法と相性が良い)になった現代のアーキテクチャでは扱いにくい。人間には10進法や16進法の方が馴染みやすい場合が多い。

まとめと実用ヒント

  • 8進法は0〜7の数字を使う位置記数法で、各桁は8の冪を表す。
  • 2進数とは3ビット単位で天然に対応するため、過去の一部のコンピュータで広く用いられた。
  • 現在でもUnixのファイル権限表示や一部のレガシー用途、プログラミングのエスケープシーケンスなどで見かけることがある。
  • 数の変換は、8で割る(10進→8進)/各桁を3ビットに変換(8進→2進)する手順で行うと分かりやすい。