情報ラボ > 2進数・16進数
コンピュータは0と1だけで数を表します。ビットを押して、そのしくみを確かめてみましょう。
10進数 → 2進数
–
2進数で答えてください
表示された数を、ビットを押して2進数でつくります。制限時間は1問20秒、ミス3回で終了です。
2進数の4桁は、16進数のちょうど1桁。区切って考えれば、すぐに変換できます。
1問30秒、ミス3回で終了です。
わたしたちがふだん使っているのは10進数です。0から9までの10個の数字を使い、9の次で桁が上がって10になります。これに対してコンピュータが使うのが2進数です。使える数字は0と1の2個だけで、1の次で桁が上がって10(読み方は「イチゼロ」)になります。
コンピュータが2進数を使うのは、電気が流れているか・いないか、電圧が高いか・低いかという2つの状態が、機械にとって最も確実に区別できるからです。この0か1かの情報1つ分をビット(bit)といい、8ビットをまとめた単位をバイト(byte)といいます。
10進数では、右から順に1の位、10の位、100の位と、10倍ずつ大きくなります。2進数も考え方は同じで、右から順に2倍ずつ大きくなります。
| 桁 | 8桁目 | 7桁目 | 6桁目 | 5桁目 | 4桁目 | 3桁目 | 2桁目 | 1桁目 |
|---|---|---|---|---|---|---|---|---|
| 重み | 128 | 64 | 32 | 16 | 8 | 4 | 2 | 1 |
たとえば2進数の「10110100」は、1になっている桁の重みを足すことで10進数に変換できます。128 + 32 + 16 + 4 = 180 です。上のツールでビットを押すと、この計算がその場で確かめられます。
nビットあれば、2のn乗通りの値を表せます。
8ビット、つまり1バイトで0から255までの256通りが表せます。画像の明るさを256段階で表す、文字コードで文字に番号をふるなど、身近なところで使われている単位です。
逆に言えば、8ビットで表せるのは255までで、それより大きい数は入りません。決められた桁数に収まらなくなることを桁あふれ(オーバーフロー)といいます。何ビット使うかを決めることは、どこまでの大きさを扱えるかを決めることでもあります。
2進数は0と1だけで表せる反面、桁数がとても長くなります。「11111111」と書くより「FF」と書けたほうが扱いやすい。そこで使われるのが16進数です。
16進数は0〜9の数字に加えて、A・B・C・D・E・Fの6文字を使い、16個で1桁を表します。Aが10、Bが11、と続いてFが15にあたります。
| 10進数 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 16進数 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | A | B | C | D | E | F |
| 2進数 | 0000 | 0001 | 0010 | 0011 | 0100 | 0101 | 0110 | 0111 | 1000 | 1001 | 1010 | 1011 | 1100 | 1101 | 1110 | 1111 |
| 10進数 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 |
|---|---|---|---|---|---|---|---|---|
| 16進数 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 |
| 2進数 | 0000 | 0001 | 0010 | 0011 | 0100 | 0101 | 0110 | 0111 |
| 10進数 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 |
|---|---|---|---|---|---|---|---|---|
| 16進数 | 8 | 9 | A | B | C | D | E | F |
| 2進数 | 1000 | 1001 | 1010 | 1011 | 1100 | 1101 | 1110 | 1111 |
16は2の4乗なので、2進数の4桁が16進数のちょうど1桁に対応します。この性質のおかげで、2進数と16進数は右から4桁ずつ区切るだけで変換できます。
10進数を経由する必要がないので、慣れると暗算でも変換できます。ウェブサイトの色指定に使われる「#FF6600」のような表記も、この16進数です。RGBそれぞれを2桁ずつ、つまり8ビットで表しています。
2で割った余りを、下から並べる方法が基本です。ただし8ビット程度であれば、大きい重みから引いていく方が速く求められます。180を例にすると、128が引ける(残り52)、64は引けない、32が引ける(残り20)、16が引ける(残り4)、8は引けない、4が引ける(残り0)、2と1は引けない。順に並べて 10110100 です。
1が立っている桁の重みを足すだけです。この計算は上のツールで実際に確認できます。
4桁ずつ区切って、上の対応表に当てはめるだけです。2進数の「11010110」なら、1101 と 0110 に分けると、それぞれ D と 6 なので D6 になります。逆に16進数の「2F」を2進数に直すときは、2 が 0010、F が 1111 なので 00101111 です。左側の桁数が足りないときは0で埋めて4桁にそろえます。
16進数は、コンピュータが扱う長い2進数を人間が読み書きするための表記として、いろいろな場面で使われています。
ウェブサイトの色指定に使う「#FF6600」は、赤・緑・青の明るさをそれぞれ8ビット(0〜255)で表し、16進数2桁ずつ並べたものです。FF は255で最も明るく、00 は0で最も暗いことを表します。
文字コードでも使われます。Unicodeでは、ひらがなの「あ」に U+3042 という番号が割り当てられています。この 3042 も16進数の表記です。
ネットワーク機器を見分けるMACアドレスは、6バイト(48ビット)を16進数2桁ずつ、区切り記号をはさんで並べたものです。
ファイルの中身をのぞくときにも16進数が使われます。データはすべて0と1では、実際のファイルの中身を2進数と16進数の両方で見ることができます。