はじめに ― 私たちは「10進法の住人」
幽灯子/基本情報技術者副専門官普段の生活で、私たちは何気なく「10」を区切りにして数を数えています。0, 1, 2, … 9 まで来たら、次は 桁が上がって「10」 になる。これがいわゆる 10進法(じっしんほう) です。
でも、この「10で区切る」というルールは、実は絶対的なものではありません。コンピュータの世界では「2で区切る」ルール(2進法)が使われていますし、時計は「60で区切る」仕組み(60進法)を使っています。
この記事では、こうした 「数の数え方のルール」を切り替える技術=基数変換 と、その理解に欠かせない 「桁の重み」 という考え方を、できるだけやさしく解説します。
1. 「基数」ってなに?



基数(きすう) とは、「いくつ集まったら桁が上がるか」を決める数のことです。
| 数え方 | 基数 | 使う数字 | 身近な例 |
|---|---|---|---|
| 2進法 | 2 | 0, 1 | コンピュータの内部処理 |
| 8進法 | 8 | 0〜7 | Unixのファイル権限 |
| 10進法 | 10 | 0〜9 | 日常生活のほぼすべて |
| 16進法 | 16 | 0〜9, A〜F | カラーコード(#FF0000 など) |
たとえば2進法では、使える数字は「0」と「1」だけ。1の次はもう桁が上がって「10」(十ではなく「いちぜろ」)になります。
2. 「桁の重み」を理解しよう


10進法での「桁の重み」
まずは馴染みのある10進法で考えてみましょう。
「253」 という数を分解すると、こうなります。
百の位 十の位 一の位
2 × 10² = 200
5 × 10¹ = 50
3 × 10⁰ = 3
合計 = 253
ここでの 10², 10¹, 10⁰ が、それぞれの桁が持つ 「重み」 です。右端の桁(一の位)は「10の0乗=1」の重みを持ち、左に行くほど重みが10倍ずつ大きくなります。
ポイント: 桁の重みとは、「その位置にある数字が、全体の値にどれだけ貢献するか」を表す倍率のことです。
2進法での「桁の重み」
2進法でもまったく同じ考え方が使えます。基数が「10」から「2」に変わるだけです。
2進法の 「1011」 を10進法に直してみましょう。
位置: 左から1番目 2番目 3番目 4番目
数字: 1 0 1 1
重み: 2³=8 2²=4 2¹=2 2⁰=1
計算: 1×8 + 0×4 + 1×2 + 1×1 = 11(10進法)
つまり、2進法の「1011」は、10進法の「11」と同じ値です。
16進法での「桁の重み」
16進法の 「2F」 を10進法に直してみましょう(Fは15を表します)。
数字: 2 F(=15)
重み: 16¹=16 16⁰=1
計算: 2×16 + 15×1 = 47(10進法)
どの進法でも、「各桁の数字 × その桁の重み」を全部足す という仕組みは共通です。
3. 基数変換のやり方
パターン① ○○進法 → 10進法(重みを使って足し算)
上で紹介した方法がそのまま使えます。各桁に重みを掛けて合計するだけです。
例:8進法の「37」→ 10進法
3 × 8¹ + 7 × 8⁰
= 3 × 8 + 7 × 1
= 24 + 7
= 31
答え:31
パターン② 10進法 → ○○進法(割り算をくり返す)
10進法の数を別の進法に変換するには、変換先の基数で割り続けて、余りを下から読む のがコツです。
例:10進法の「25」→ 2進法
25 ÷ 2 = 12 … 余り 1 ↑
12 ÷ 2 = 6 … 余り 0 |
6 ÷ 2 = 3 … 余り 0 | この方向に読む
3 ÷ 2 = 1 … 余り 1 |
1 ÷ 2 = 0 … 余り 1 |
余りを 下から上に 読むと(最後の余りから順に並べる) → 11001
検算してみましょう。
1×16 + 1×8 + 0×4 + 0×2 + 1×1 = 25 OK!
パターン③ 2進法 ↔ 8進法・16進法(グループ分け)
2進法と8進法・16進法の間には便利な近道があります。
- 2進法 → 8進法: 右から3桁ずつ区切って、それぞれを8進法の1桁に変換
- 2進法 → 16進法: 右から4桁ずつ区切って、それぞれを16進法の1桁に変換
例:2進法「11010110」→ 16進法
右から4桁ずつ区切る: 1101 | 0110
D 6
答え:D6
4. 日常生活の中の「基数変換」





実は、私たちは無意識に基数変換に似たことをしています。
- 時間: 「130分は何時間何分?」→ 130 ÷ 60 = 2時間10分(60進法的な変換)
- お金の両替: 1000円札を100円玉に崩す → 10枚(10を基数とした桁の移動)
- Webデザイン: カラーコード
#FF8800は、RGBそれぞれを16進法2桁で表現したもの
5. まとめ
| 概念 | ひとことで言うと |
|---|---|
| 基数 | 「何個集まったら桁が上がるか」の数 |
| 桁の重み | その位置にある数字の「影響力の大きさ」(基数のべき乗) |
| ○○進法 → 10進法 | 各桁 × 重み を全部足す |
| 10進法 → ○○進法 | 基数で割り続けて、余りを逆順に読む |
| 2進 ↔ 8進・16進 | 3桁 or 4桁ずつグループ分けで変換 |



基数変換は、最初はとっつきにくく感じるかもしれません。でも、根っこにある考え方は 「桁の重みを使った掛け算と足し算」 というシンプルなものです。一度この仕組みが腑に落ちれば、どんな進法でも怖くありません。










コメント