コラム:いろいろな進数
目次
説明
このコラムは少し難しい内容について扱います。初心者の方は、読まずに済ませても構いません。
プログラミングに少し慣れてきてから読むとよいでしょう。
進数
普段、私たちが使っている数字体系は、「0123456789」と来て、1桁上がります。こうした、10の数字ごとに桁が上がる数字体系を『10進数』と呼びます。
コンピュータでは、「01」と来て、1桁上がる数字体系を使っています。こうした2つの数字ごとに桁が上がる数字体系を『2進数』と呼びます。
ただ、人間がそのまま2進数を扱うのは、桁数が大きくなりすぎるため、あまり適切ではありません。たとえば、10進数で「999」と書けばよいところを、2進数では「1111100111」と書かなければなりません。プログラム中で数字を扱うには、10進数か、それに近い数字体系を使いたいところです。
そこで用いられているのが『16進数』です。大きな値を2進数より短く書け、2進数4桁分で16進数1桁分になるというメリットがあります。16進数では、数字とアルファベットを使い、0から15までの数値を表します。
10進数 | 2進数 | 16進数 |
---|---|---|
0 | 0 | 0 |
1 | 1 | 1 |
2 | 10 | 2 |
3 | 11 | 3 |
4 | 100 | 4 |
5 | 101 | 5 |
6 | 110 | 6 |
7 | 111 | 7 |
8 | 1000 | 8 |
9 | 1001 | 9 |
10 | 1010 | A |
11 | 1011 | B |
12 | 1100 | C |
13 | 1101 | D |
14 | 1110 | E |
15 | 1111 | F |
16 | 10000 | 10 |
17 | 10001 | 11 |
: | : | : |
テキストファイルの仕組み
英数字のテキストファイル
コンピューターのファイルは、0と1で現されるデータがたくさん並んでいます。
英数字のテキストファイルでは、このデータを「4つを1単位」として区切り、その「2つ分」でどの文字かを決めています。
1単位(4つ)が2つなので「4×2」で8つ分。0と1が8桁分なので「2の8乗」となり、「256個の文字」を表せます。
この1単位(0000~1111)は、16進数1桁分(0~F)です。そのため、0と1が8桁分は「16進数2桁分」と言い換えられます。
2進数より16進数の方が見やすいため、慣例的に16進数で文字コードを表記します。
コンピュータの世界では、英数字1文字分に相当する16進数2桁分を『1バイト』と呼びます。2進数1桁分は『1ビット』と呼びます。そのため、『1バイト = 8ビット』となります。
英数字の文字コード
文字 | 10進数の数字 | 2進数の数字 | 16進数の数字 |
---|---|---|---|
c | 99 | 1100011 | 63 |
a | 97 | 1100001 | 61 |
t | 116 | 1110100 | 74 |
英数字以外のテキストファイル
英数字や記号だけなら、256文字で表すことができますが、日本語だと漢字もありますので表すことができません。そのため、もっと多い桁数で表します。
その際、Shift_JISは2バイト(16進数4桁)で表します。そのため、日本語のような文字を『2バイト文字』と呼んだりします。
UTF-8では、日本語だけでなく、多くの言語の文字も表現可能になっています。そのため、英数字の1バイト以外に、2バイトの、3バイトの文字などがあります。日本語は3バイトで表現します。
日本語Shift_JISの文字コード
文字 | 10進数の数字 | 16進数の数字 |
---|---|---|
ね | 33483 | 82CB |
こ | 33457 | 82B1 |
日本語UTF-8の文字コード
文字 | 10進数の数字 | 16進数の数字 |
---|---|---|
ね | 14909869 | E381AD |
こ | 14909843 | E38193 |