凡算之法、先識其位。
「孫子算経」
ここでは、10進数、2進数、8進数、16進数の記数法について学ぶ。学習の目標は次の通りである:
位取り記数法を理解する
任意の記数法から10進数への変換ができる
10進数から他の記数法への変換ができる
2進数、8進数、16進数の相互変換ができる
ビットとバイトの概念を理解する
10進数¶
私たちが日常的に使っている10進法は、0から9の数字を用いて数を表現する。各数字の位置によってその値が決まる。例えば、123という数は、以下のように表現される:
123=1×102+2×101+3×100 このように、各数字の位置によってその値が決まる記数法を位取り記数法(くらいどりきすうほう、positional notation)と呼ぶ。
一般に、dnをn桁目の数字、Nを10進数の数とすると、以下の式が成り立つ:
N=dn×10n−1+dn−1×10n−2+…+d1×100 他の記数法と底¶
底(base)とは、使用する数字の種類の数である。10進法では0から9までの10種類の数字を使用するため、底は10である。
2進法では0と1の2種類の数字を使用し、底は2である。
8進法では0から7までの8種類の数字を使用し、底は8である。
16進法では0から9とAからFまでの16種類の数字を使用し、底は16である。
2進法は、2を底とする位取り記数法であり、0と1を使用し、数を表現する。そのため、0, 1の次には1桁を追加して10となり、次は11、100、101と続く。
以下に、10進数、2進数、8進数、16進数の対応表を示す:
| 10進数 | 2進数 | 8進数 | 16進数 |
|---|
| 0 | 0 | 0 | 0 |
| 1 | 1 | 1 | 1 |
| 2 | 10 | 2 | 2 |
| 3 | 11 | 3 | 3 |
| 4 | 100 | 4 | 4 |
| 5 | 101 | 5 | 5 |
| 6 | 110 | 6 | 6 |
| 7 | 111 | 7 | 7 |
| 8 | 1000 | 10 | 8 |
| 9 | 1001 | 11 | 9 |
| 10 | 1010 | 12 | A |
| 11 | 1011 | 13 | B |
| 12 | 1100 | 14 | C |
| 13 | 1101 | 15 | D |
| 14 | 1110 | 16 | E |
| 15 | 1111 | 17 | F |
ここからは、下付き文字を用いて、底を示すことにする。例えば、2進数の101は、1012と表記する。10進数の123は、12310と表記する。
やってみよう¶
10進数の1~10を3進数で書いてみよう。
他の記数法から10進数への変換¶
上記の表を見るとわかるように、2進数2桁目の1は10進数の2で、3桁目の1は10進数の22である。つまり、2進数を10進数に変換する際は、下記のように計算することができる:
dn×2n−1+dn−1×2n−2+…+d1×20=N10 例えば、2進数の10012を10進数に変換する場合、以下のように計算する:
10012=1×23+0×22+0×21+1×20=910 dnをn桁目の数字、Rを底、Nを10進数の数とすると、以下の式が成り立つ:
N10=dn×Rn−1+dn−1×Rn−2+…+d1×R0 また、以下のように書くこともできる:
N10=i=1∑ndi×Ri−1 例えば、3進数の1023を10進数に変換する場合、以下のように計算する:
1023=1×32+0×31+2×30=1110 また、16進数の1A3F16を10進数に変換する場合、以下のように計算する:
1A3F16=1×163+10×162+3×161+15×160=671910 これは、16進数のAが10に相当し、Fが15に相当するからである。
やってみよう¶
次の数を10進数に変換せよ。
2進法、8進法、16進法¶
2進法、8進法、16進法は、全て2の累乗を底とする記数法であるため、変換は簡単に行える。
| 2進数 | 16進数 |
|---|
| 0000 | 0 |
| 0001 | 1 |
| 0010 | 2 |
| 0011 | 3 |
| 0100 | 4 |
| 0101 | 5 |
| 0110 | 6 |
| 0111 | 7 |
| 1000 | 8 |
| 1001 | 9 |
| 1010 | A |
| 1011 | B |
| 1100 | C |
| 1101 | D |
| 1110 | E |
| 1111 | F |
2進数の4桁ごとに16進数の1桁に対応する。例えば、2進数の10101102は、4桁ごとに区切ると0101 0110となり、これを16進数に変換すると5616となる。
16進数を2進数に変換する場合は、各16進数の桁を4桁の2進数に変換すればよい。例えば、16進数の1A3F16は、以下のように変換される:
1A3F16=0001 1010 0011 11112 8進法も同様に、3桁の2進数に対応する。
| 2進数 | 8進数 |
|---|
| 000 | 0 |
| 001 | 1 |
| 010 | 2 |
| 011 | 3 |
| 100 | 4 |
| 101 | 5 |
| 110 | 6 |
| 111 | 7 |
2進数の3桁ごとに8進数の1桁に対応する。例えば、
10101102=001 010 1102=1268 やってみよう¶
次の数を16進数と8進数に変換せよ。
110101102
1011100112
11110001001010012
次の数を2進数に変換せよ。
10進数から他の記数法への変換¶
10進数から他の記数法への変換は、下記の手順で行うことができる:
与えられた値を底で割り、商と余りを求める。
商が0になるまで繰り返す。
商が0になったら、余りを逆順に並べる。
例えば、10進数の11310を2進数に変換する場合、以下のように計算する:
113÷2=56R1=156÷2=28R2=028÷2=14R3=014÷2=7R4=07÷2=3R5=13÷2=1R6=11÷2=0R7=1 余りを逆順に並べると、11100012となる。
検算として、11100012を10進数に戻すと:
11100012=26+25+24+20=11310 もう一つの例として、10進数の26810を16進数に変換する場合、以下のように計算する:
268÷16=16R1=1216÷16=1R2=01÷16=0R3=1 余りを逆順に並べると、10C16となる。
やってみよう¶
次の10進数を2進数、8進数、16進数に変換せよ。
ビットとバイト¶
情報量の最小単位はビット(bit)である。bitはbinary digit(2進数の桁)を略したもので、2進法の1桁分の情報を表す。バイト(byte)は、通常は8 bitで構成される。
例えば、0101 00102の情報量は8 bitであり、1 byteに相当する。
1 bitは0または1のいずれかの値をとる。そのため、1 bitは2種類の物事を表現できる。例えば、電源のオン/オフ、陽性/陰性、真/偽などである。
ビット数が増えると、表現できる種類も増える。2 bitでは、00、01、10、11の4種類を表現できる。8 bitは256種類(28)を表現できる。
| 1 Bit | 2 Bit | 3 Bit |
|---|
| 0 | 00 | 000 |
| 1 | 01 | 001 |
| 10 | 010 |
| 11 | 011 |
| | 100 |
| | 101 |
| | 110 |
| | 111 |
一般に、n bitは2n種類の情報を表現できる。
ビットパターン¶
このように、より複雑な情報を表現するために、複数のビットを並べるものはビット列(bit string)と呼ばれる。
コンピューターが扱うデータは、一般的に8, 16, 32, 64ビットなど、2の累乗のビット数で構成される。特定のビット数を持つデータは、ビットパターン(bit pattern)と呼ばれる。ビットパターンは,数値,文字,画像,音声など、様々なデータを表現するために使用される.
ビットパターンを2進数で表現すると非常に長くなる場合があるため、16進数を使用することも多い.1 byteは16進数では2桁で表現できる。例えば、8 bitのビットパターン101011002は、16進数ではAC16と表現される。
練習問題¶
情報量の最小単位は____である。一般に、n bitは____の種類を表現できる。また、8 bitは1 ____に相当する。
まとめ¶
| 日本語 | 英語 |
|---|
| 10進数 | decimal number |
| 2進数 | binary number |
| 8進数 | octal number |
| 16進数 | hexadecimal number |
| 位取り記数法 | positional notation |
練習問題¶
解答例¶
3進数:
110=13
210=23
310=103
410=113
510=123
610=203
710=213
810=223
910=1003
1010=1013
他の記数法から10進数への変換
11012=1310
738=5910
CAFE16=5196610
2進数、8進数、16進数の相互変換
10進数から他の記数法への変換
4510=1011012=558=2D16
10010=11001002=1448=6416
25510=111111112=3778=FF16