基数と2進数の世界 / ビット、バイト

このテキストについて

このテキストは次の授業で使用されている標準化された教材です。

実際の授業では解説が加わる上に、生徒様に合わせて教材は制作・調整されるため、 このテキストよって得られる理解がMimir Yokohamaの授業のすべてではないことを予めご理解ください。

基数とは

数がNに達したとき、桁がひとつ増える数の表し方をN進数と言い、基数Nの数値と言います。

2進数の世界

「コンピュータは1と0」というのはよく聞く話だと思います。

これは「情報があるかないか」を表したもので、「ある」場合は1、「ない」場合は0とみなします。

0と1しかない以上、情報量を増やすには桁数を増やすしかありません。

0
1
10
11
100
101
111
...

これを数として扱えるようにすれば計算することができます。 なのでひとつ数が増えるごとに1つずつ数える、というルールを適用しましょう。 ものすごく当たり前の話なんですけどね。

0 = 0
1 = 1
10 = 2
11 = 3
100 = 4
101 = 5
110 = 6
111 = 7
1000 = 8
...

これが2進数 (binary) です。2になったときには桁があがりますから2が登場することはありません。 普段使っているのは10進数ですが、10になったときには桁が上がりますから10という数字はありませんね1

ビットとバイト

2進数の1桁が「1ビット」で、 8桁が「1バイト」です。

16進数

2進数4桁で表せる最大値である1111は15です。 16進数があれば1桁でちょうど2進数の4桁を表すことができます。

ですからコンピュータではよく16進数 (hexadecimal) が使われます。

2進数 16進数 10進数
0 0 0
1 1 1
10 2 2
11 3 3
100 4 4
101 5 5
110 6 6
111 7 7
1000 8 8
1001 9 9
1010 A 10
1011 B 11
1100 C 12
1101 D 13
1110 E 14
1111 F 15
10000 10 16
10100101 A5 165

10100101が「1010→A」「101→5」と求められることに注目してください。 16進数と2進数はそのまま対照することができます。10進数の場合は計算しなくてはなりません。

16進数の利便性

コンピュータが2進数である以上、コンピュータの世界の最大数は2の累乗になることになり、それを分割する場合桁で分割すればわかりやすくなります。

16進数は桁分けすることで10進数の場合よりもわかりやすくなります。

たとえば共有の音楽ライブラリに2バイト分の曲スロットがあり、これを8人で分けるとします。 番号は0から255までありますが、これを等分すると、1人目は0から31、2人目は32から65まで使える…となります。ちょっとわかりづらいですね。

これを16進数で管理すると楽になります。 1桁目が0または1のスロットは1人目のものです。1桁目が2または3のスロットは2人目のものです。8人目が使えるスロットは1桁目がEまたはFのものです。

16進数を使用することでコンピュータの都合で決まっているものを使うために中途半端な数を覚えておく必要がなくなります。

8進数

2進数で3桁を表す場合は8進数を使うことで簡単に表すことができます。

しかし、1バイトが8ビットですから、3桁で分けることはあまり嬉しい要素がありません。 ASCIIコードを表すのに8進数が使われていたりもしたのですが、実際に使用する場面は非常に限定的です。


  1. 日本語だと十がありますけれど、これは“x10”という意味ですね。

Fullsized Image