進法(基数)変換の仕組み:2進数・8進数・10進数・16進数

どの進法も「桁の重み」という同じ原理で成り立っています。違うのは使える数字の種類の数だけです。

位取りの原理はどの進法でも共通

各桁の値は「その桁の数字 × 底(進法の基数)の累乗」で決まり、一番右の桁を0乗として数えます。この一つのルールだけで、10進数の10も、2進数の1010も、16進数のAも同じ量を表せます。

2進数はハードウェアの母国語

トランジスタはオン・オフの2つの安定状態しか持たないため、コンピューター内部ではあらゆる数値が最終的に2進数として記録されています。私たちが目にする10進数や色コードは、その表示上の変換結果にすぎません。

16進数は2進数を短く書くための表記

16進数は0〜9とA〜Fを使い、16が2の累乗(2の4乗)であるため、16進数の1桁がちょうど2進数の4桁に対応します。長い2進数を人間が読みやすく圧縮できるため、カラーコードやメモリアドレス表記でよく使われます。

8進数は16進数より小さな圧縮表記

8進数は0〜7の数字を使い、1桁が2進数の3桁に対応します。初期のコンピューターで広く使われ、現在もUnix系OSのファイル権限表記(例:755)などで見かけます。

10進数を経由しない高速変換法

2進数を16進数や8進数に変換するときは、右端から4桁(16進数用)または3桁(8進数用)ずつグループ化して、各グループを個別に変換すれば、10進数を経由せずに一気に変換できます。

36進法までの任意の底に対応

2〜36進法は0〜9の数字とA〜Zのアルファベットを使えば表現できます。36進法は標準的な英数字だけで表せる実用上の上限で、短いURLやIDを生成する仕組みなどで使われています。

なぜコンピューターの単位はすべて2進数がベースなのか

トランジスタは本質的に2状態しか持たないスイッチであるため、2進数は設計上の選択というより、ハードウェアそのものの反映です。8ビットを1バイトとする単位が初期のコンピューター史で標準となり、16進数はその1バイトをちょうど2桁で誤差なく表せることから広く使われるようになりました。

電卓なしでできる速算のコツ

10進数への変換は「各桁の数字×底の累乗」を足し合わせるだけです。2進数から16進数・8進数への変換は、10進数を経由するより桁をグループ化する方が速く済みます。2の16乗までのべき乗を覚えておくと、2進数や16進数の暗算がぐっと楽になります。

よくある質問

なぜプログラマーはメモリアドレスを2進数より16進数で読むのか

1バイトを表すのに2進数では8桁必要ですが、16進数ならわずか2桁で済みます。16が2の累乗であるため4ビットのグループにきれいに対応し、2進数と完全に一致したまま大幅に短く読みやすくなるためです。

一般的に使われる進法の中で一番大きいものは?

0〜9とA〜Zという標準的な文字セットで表現できる実用上の上限は36進法です。これより大きい桁を表す新しい文字がないためです。短縮URLやID生成の仕組みで、短い文字列に大きな数値を詰め込む目的でよく使われます。