タスカルツールズ

2進数・10進数・16進数の変換方法

基数変換の計算手順、よく使う値の早見表、プログラミングでの活用例をわかりやすく解説します。

基数(N進数)とは

基数とは、数を表す際に各桁で使う数字の種類の数のことです。私たちが普段使っている10進数は0〜9の10種類の数字を使います。同様に、2進数は0と1の2種類、8進数は0〜7の8種類、16進数は0〜9とA〜Fの16種類の文字を使って数を表します。

進数基数使う文字
2進数20, 1
8進数80, 1, 2, 3, 4, 5, 6, 7
10進数100, 1, 2, 3, 4, 5, 6, 7, 8, 9
16進数160, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E, F

16進数ではA〜Fが10〜15に対応します。大文字・小文字の区別はなく、aとAは同じ値を表します。

16進数10進数
A10
B11
C12
D13
E14
F15

N進数 → 10進数の変換

N進数から10進数へ変換するには、各桁の値に「基数の累乗」を掛けて合計します。右端の桁が0乗、左に行くほど累乗が1ずつ増えます。

例: 2進数 1011 → 10進数

1×2³ + 0×2² + 1×2¹ + 1×2⁰

= 8 + 0 + 2 + 1 = 11

例: 16進数 2F → 10進数

2×16¹ + F(15)×16⁰

= 32 + 15 = 47

10進数 → N進数の変換

10進数からN進数へ変換するには、Nで割り続けて余りを逆順に並べます。商が0になるまで繰り返します。

例: 10進数 13 → 2進数

13 ÷ 2 = 6 … 余り 1

 6 ÷ 2 = 3 … 余り 0

 3 ÷ 2 = 1 … 余り 1

 1 ÷ 2 = 0 … 余り 1

余りを逆順に読む → 1101

例: 10進数 255 → 16進数

255 ÷ 16 = 15 … 余り 15(F)

 15 ÷ 16 =  0 … 余り 15(F)

余りを逆順に読む → FF

2進数 ⇔ 16進数の変換

2進数と16進数は特に相性が良く、2進数を4桁ずつグループ化するだけで16進数に変換できます。これは16 = 2⁴ であるため、2進数4桁がちょうど16進数1桁に対応するからです。

例: 2進数 10101111 → 16進数

1010 1111

↓     ↓

  A     F   → AF

逆に16進数から2進数に変換する場合は、各桁を4桁の2進数に展開するだけです。この簡便さから、コンピュータの分野ではメモリやデータの表記に16進数がよく使われます。

よく使う値の早見表

プログラミングやIT分野でよく登場する値の10進数・2進数・8進数・16進数の対応表です。

10進数2進数8進数16進数
00000 000000000
10000 000100101
70000 011100707
80000 100001008
100000 10100120A
150000 11110170F
160001 000002010
320010 000004020
640100 000010040
1270111 11111777F
1281000 000020080
2551111 1111377FF

※255(FF)は1バイトで表現できる最大値、127(7F)は符号付き8ビット整数の最大値です。

プログラミングでの用途

プログラミングでは10進数以外の進数が様々な場面で使われています。

16進数の用途

CSSのカラーコード(例: #FF0000 = 赤)は16進数でRGB各色を表しています。FFは10進数で255、つまりその色の最大値です。メモリアドレスやバイナリデータの表記にも16進数が標準的に使われます。

2進数の用途

ビット演算やフラグ管理に使われます。例えば、権限管理で「読み取り=4(100)、書き込み=2(010)、実行=1(001)」のようにビットごとに権限を割り当て、OR演算で組み合わせるといった使い方です。

8進数の用途

Unixのファイルパーミッション(例: chmod 755)は8進数です。755は「所有者=7(rwx)、グループ=5(r-x)、その他=5(r-x)」を意味し、各桁が3ビットの権限に対応しています。

プログラミング言語での記法

主要なプログラミング言語での2進数・8進数・16進数のリテラル(直接記述する方法)の一覧です。いずれも10進数の10を各進数で表しています。

言語2進数(10)8進数(10)16進数(10)
JavaScript0b10100o120xA
Python0b10100o120xA
C / Java0b10100120xA
Ruby0b10100o120xA

※C言語では8進数はプレフィックス「0」だけで表記します(例: 012 = 10進数の10)。意図せず8進数になるバグの原因になるため注意が必要です。

よくある質問

Q. 16進数のA〜Fは何を意味しますか?
16進数では0〜9に加えてA〜Fの6つのアルファベットを使います。Aは10進数の10、Bは11、Cは12、Dは13、Eは14、Fは15に対応します。大文字・小文字の区別はなく、aとAは同じ値です。
Q. カラーコード#FFFFFFは何進数ですか?
カラーコード#FFFFFFは16進数です。先頭の#はカラーコードであることを示す記号で、FFFFFFはRGB各色を16進数2桁ずつ(FF=255, FF=255, FF=255)で表しています。#FFFFFFは白色を意味します。
Q. 2進数と16進数はなぜ相性が良いのですか?
16は2の4乗(2⁴=16)であるため、2進数4桁がちょうど16進数1桁に対応します。このため、2進数を4桁ずつ区切るだけで16進数に変換でき、逆に16進数の各桁を4桁の2進数に展開するだけで2進数に変換できます。コンピュータ内部は2進数で動作しますが、長い2進数は読みにくいため、コンパクトな16進数で表記されることが多いのです。
Q. 8進数はどこで使われますか?
8進数は主にUnix/Linuxのファイルパーミッション(アクセス権限)で使われます。chmod 755のように3桁の8進数で「所有者・グループ・その他」の権限を表します。各桁は3ビット(読み取り4+書き込み2+実行1)に対応しており、7は全権限(rwx)、5は読み取りと実行(r-x)を意味します。

関連ツール