2進数・10進数・16進数:相互に変換する方法

進数の変換は、どの桁にあるかで数字の価値が決まるという同じ考え方に気づくと、魔法ではなくなります。ここでは、2進数から10進数、10進数から2進数への手計算、16進数の読み方、テキストをビットに変える方法を、解き方つきで説明します。手元に置ける0〜15の対応表もあります。

更新日:

位取り記数法とは

10進数の4,095では、4は4ではなく4,000を表します。千の位にあるからです。それぞれの位は、数字に10のべき乗(1、10、100、1,000…)をかけます。これが位取り記数法で、基数とは使う数字の種類の数です。10進数では10種類です。

2進数も同じ仕組みですが基数は2で、使えるのは0と1だけ、各位の価値は1つ下の位の2倍になります。16進数は基数が16で、16個の数字は0〜9とA〜Fの文字、各位の価値は1つ下の位の16倍です。コンピューターが2進数で動くのは、回路が2つの状態(オフとオン)を区別するだけで済むからで、16進数はそのビットを短く書く方法です。

各位の価値です。128までの2のべき乗を覚えておくと、ほとんどの計算が楽になります。
位(右から左へ)2進数での価値16進数での価値
1番目11
2番目216
3番目4256
4番目84,096
5番目1665,536
6番目321,048,576
7番目6416,777,216
8番目128268,435,456

2進数から10進数へ(手計算)

各桁にその位の価値を書き、1がある位だけを足します。1101を例にします。右から左へ、位の価値は1、2、4、8です。

  1. 数を書き、その下に各位の価値を書きます。1 1 0 1 の下に 8 4 2 1。
  2. 各位に何があるかを見ます。8の位に1、4の位に1、2の位に0、1の位に1です。
  3. 0がある位は無視します(ここでは2の位)。
  4. 足します。8 + 4 + 0 + 1 = 13。したがって2進数の1101は10進数の13です。

桁数が増えても同じです。11111111は128 + 64 + 32 + 16 + 8 + 4 + 2 + 1 = 255で、8ビットに収まる最大の値です。また10110110は128 + 32 + 16 + 4 + 2 = 182です。

10進数から2進数へ(割り算の繰り返し)

数を2で割ることを、商が0になるまで繰り返し、毎回の余り(必ず0か1)を書き留めます。余りを下から上へ読むと2進数になります。45を例にします。

余りを下から上へ読むと101101になります。確認するには足してみます。32 + 8 + 4 + 1 = 45。

もう1つ、好む人が多い方法があります。大きい2のべき乗から順に引いていく方法です。200の場合:128が入り(残り72)、64が入り(残り8)、32と16は入らず、8は入ります(残り0)。使った位は128、64、8なので、200 = 11001000です。

16進数:16個の数字と手元に置ける対応表

10〜15を表す数字はないため、文字のA、B、C、D、E、Fを使います。16進数の1桁は、ちょうど4ビット(「ニブル」)に当たります。そのため便利で、8ビットの1バイトをたった2桁の16進数で書けます。

16進数から10進数にするには、各桁にその位の16のべき乗をかけて足します。たとえば3F = 3 × 16 + 15 = 63、A3 = 10 × 16 + 3 = 163です。

0〜15を、ツールが表示する4つの進数で並べた表です。
10進数2進数(4ビット)8進数16進数
0000000
1000111
2001022
3001133
4010044
5010155
6011066
7011177
81000108
91001119
10101012A
11101113B
12110014C
13110115D
14111016E
15111117F

16進数が使われる理由:バイト、色、アドレス

1バイトは8ビットで、0〜255(00000000〜11111111)の値を取ります。ビットを手で書くのは遅く、間違いやすいものです。16進数なら同じバイトが00〜FFの2文字で済みます。2進数から16進数にするには、ビットを右から4つずつに区切り、各グループを表の数字に置き換えます。例:11010111は1101と0111に分かれ、それぞれDと7なので、D7です。10進数では13 × 16 + 7 = 215です。

いちばん有名なのはWebの色です。#FF8800には3つのバイトがあります。赤がFF(255)、緑が88(136)、青が00(0)です。これは鮮やかなオレンジで、赤は最大、緑は半分より少し多く、青はゼロです。16進数はメモリのアドレスやエラーコード、ネットワークの識別子にも登場します。

ASCIIでテキストを2進数に

コンピューターは文字を数として、その数をビットとして保存します。ASCIIの表ではAは65で、8ビットの2進数にすると01000001です。「Hi」は2文字で、Hは72(01001000)、iは105(01101001)なので、01001000 01101001と書きます。「Hola」は72、111、108、97、つまり01001000 01101111 01101100 01100001、16進数では48 6F 6C 61です。

このツールはUTF-8という符号化を使います。英語の基本的な文字は1文字が8ビットの1バイトですが、日本語の文字、ñ、アクセント付きの文字、絵文字は複数のバイトを使うため、8ビットを超えます。たとえばñは2バイトで、11000011 10110001(16進数でC3 B1)です。

ツールで同じことをする方法

「2進数・10進数・16進数変換」は、手計算の確認や、長い数をミスなく解くのに役立ちます。

  1. その進数の欄に数を入力します。「10進数(基数10)」「2進数(基数2)」、8進数、「16進数(基数16)」のどれかです。残りの3つは自動で入力されます。
  2. その進数で使えない数字(たとえば2進数の2)を入力すると、ツールが知らせてくれます。
  3. テキストの場合は、「テキスト」の欄に入力して、「2進数(1文字あたり8ビット)」とバイトごとの16進数を見ます。8ビットずつのビット列を貼り付けて、テキストに戻すこともできます。
  4. 変わった進数には「好きな進数(2〜36進数)」を使います。変換元の進数、変換先の進数、数値を選びます。

制限として、変換できるのは0以上の整数のみ(小数や符号は不可)で、先頭の0は自動では付かないため、8ビットに固定したいときは自分で補います(13は00001101)。入力した内容がブラウザの外に出ることはありません。

よくある間違い

練習問題(解答つき)

答えを見る前に1問ずつ解いてみて、あとでツールで確かめてください。

よくある質問

2進数の1101を10進数にするには?

1がある位の価値を足します。8 + 4 + 1 = 13。右から2番目の桁は0なので、2は足しません。

255は2進数と16進数でいくつですか?

255は2進数で11111111、16進数でFFです。8ビットの1バイトに収まる最大の値です。

16進数はなぜ文字を使うのですか?

16個の異なる記号が必要なのに、10進数の数字は10個(0〜9)しかないからです。そのためAは10、Bは11、Cは12、Dは13、Eは14、Fは15を表します。

8ビットでは何通りの数を書けますか?

0〜255の256通りです。一般に、nビットでは2のn乗個の値を表せます。

ツールはマイナスの数や小数も変換できますか?

いいえ、0以上の整数だけです。テキストはUTF-8を使うので、アクセント付きの文字や絵文字は8ビットを超えます。