Skip to article frontmatterSkip to article content

記数法

法政大学

凡算之法、先識其位。

「孫子算経」

ここでは、10進数、2進数、8進数、16進数の記数法について学ぶ。学習の目標は次の通りである:

10進数

私たちが日常的に使っている10進法は、0から9の数字を用いて数を表現する。各数字の位置によってその値が決まる。例えば、123という数は、以下のように表現される:

123=1×102+2×101+3×100123 = 1 \times 10^2 + 2 \times 10^1 + 3 \times 10^0

このように、各数字の位置によってその値が決まる記数法を位取り記数法(くらいどりきすうほう、positional notation)と呼ぶ。

一般に、dnd_nをn桁目の数字、NNを10進数の数とすると、以下の式が成り立つ:

N=dn×10n1+dn1×10n2++d1×100N = d_n \times 10^{n-1} + d_{n-1} \times 10^{n-2} + \ldots + d_1 \times 10^0

他の記数法と底

(base)とは、使用する数字の種類の数である。10進法では0から9までの10種類の数字を使用するため、底は10である。

2進法は、2を底とする位取り記数法であり、0と1を使用し、数を表現する。そのため、0, 1の次には1桁を追加して10となり、次は11、100、101と続く。

以下に、10進数、2進数、8進数、16進数の対応表を示す:

10進数2進数8進数16進数
0000
1111
21022
31133
410044
510155
611066
711177
81000108
91001119
10101012A
11101113B
12110014C
13110115D
14111016E
15111117F

ここからは、下付き文字を用いて、底を示すことにする。例えば、2進数の101は、1012\texttt{101}_2と表記する。10進数の123は、12310\texttt{123}_{10}と表記する。

やってみよう

10進数の1~10を3進数で書いてみよう。

他の記数法から10進数への変換

上記の表を見るとわかるように、2進数2桁目の1は10進数の2で、3桁目の1は10進数の22である。つまり、2進数を10進数に変換する際は、下記のように計算することができる:

dn×2n1+dn1×2n2++d1×20=N10d_n \times 2^{n-1} + d_{n-1} \times 2^{n-2} + \ldots + d_1 \times 2^0 = N_{10}

例えば、2進数の10012を10進数に変換する場合、以下のように計算する:

10012=1×23+0×22+0×21+1×20=9101001_2 = 1 \times 2^3 + 0 \times 2^2 + 0 \times 2^1 + 1 \times 2^0 = 9_{10}

dnd_nをn桁目の数字、RRを底、NNを10進数の数とすると、以下の式が成り立つ:

N10=dn×Rn1+dn1×Rn2++d1×R0N_{10} = d_n \times R^{n-1} + d_{n-1} \times R^{n-2} + \ldots + d_1 \times R^0

また、以下のように書くこともできる:

N10=i=1ndi×Ri1N_{10} = \sum_{i=1}^{n} d_i \times R^{i-1}

例えば、3進数の1023を10進数に変換する場合、以下のように計算する:

1023=1×32+0×31+2×30=1110102_3 = 1 \times 3^2 + 0 \times 3^1 + 2 \times 3^0 = 11_{10}

また、16進数の1A3F16\texttt{1A3F}_{16}を10進数に変換する場合、以下のように計算する:

1A3F16=1×163+10×162+3×161+15×160=671910\texttt{1A3F}_{16} = 1 \times 16^3 + 10 \times 16^2 + 3 \times 16^1 + 15 \times 16^0 = 6719_{10}

これは、16進数のAが10に相当し、Fが15に相当するからである。

やってみよう

次の数を10進数に変換せよ。

2進法、8進法、16進法

2進法、8進法、16進法は、全て2の累乗を底とする記数法であるため、変換は簡単に行える。

2進数16進数
00000
00011
00102
00113
01004
01015
01106
01117
10008
10019
1010A
1011B
1100C
1101D
1110E
1111F

2進数の4桁ごとに16進数の1桁に対応する。例えば、2進数の10101102は、4桁ごとに区切ると0101 01100101\ 0110となり、これを16進数に変換すると5616となる。

16進数を2進数に変換する場合は、各16進数の桁を4桁の2進数に変換すればよい。例えば、16進数の1A3F16\texttt{1A3F}_{16}は、以下のように変換される:

1A3F16=0001 1010 0011 11112\texttt{1A3F}_{16} = 0001\ 1010\ 0011\ 1111_2

8進法も同様に、3桁の2進数に対応する。

2進数8進数
0000
0011
0102
0113
1004
1015
1106
1117

2進数の3桁ごとに8進数の1桁に対応する。例えば、

10101102=001 010 1102=12681010110_2 = 001\ 010\ 110_2 = 126_8

やってみよう

次の数を16進数と8進数に変換せよ。

次の数を2進数に変換せよ。

10進数から他の記数法への変換

10進数から他の記数法への変換は、下記の手順で行うことができる:

  1. 与えられた値を底で割り、商と余りを求める。

  2. 商が0になるまで繰り返す。

  3. 商が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=1113 \div 2 = 56 \quad R_1 = 1 \\ 56 \div 2 = 28 \quad R_2 = 0 \\ 28 \div 2 = 14 \quad R_3 = 0 \\ 14 \div 2 = 7 \quad R_4 = 0 \\ 7 \div 2 = 3 \quad R_5 = 1 \\ 3 \div 2 = 1 \quad R_6 = 1 \\ 1 \div 2 = 0 \quad R_7 = 1

余りを逆順に並べると、11100012となる。

検算として、11100012を10進数に戻すと:

11100012=26+25+24+20=113101110001_2 = 2^6 + 2^5 + 2^4 + 2^0 = 113_{10}

もう一つの例として、10進数の26810を16進数に変換する場合、以下のように計算する:

268÷16=16R1=1216÷16=1R2=01÷16=0R3=1268 \div 16 = 16 \quad R_1 = 12 \\ 16 \div 16 = 1 \quad R_2 = 0 \\ 1 \div 16 = 0 \quad R_3 = 1

余りを逆順に並べると、10C16\texttt{10C}_{16}となる。

やってみよう

次の10進数を2進数、8進数、16進数に変換せよ。

ビットとバイト

情報量の最小単位はビット(bit)である。bitはbinary digit(2進数の桁)を略したもので、2進法の1桁分の情報を表す。バイト(byte)は、通常は8 bitで構成される。

例えば、0101 00102\texttt{0101 0010}_{2}の情報量は8 bitであり、1 byteに相当する。

1 bitは0または1のいずれかの値をとる。そのため、1 bitは2種類の物事を表現できる。例えば、電源のオン/オフ、陽性/陰性、真/偽などである。

ビット数が増えると、表現できる種類も増える。2 bitでは、00、01、10、11の4種類を表現できる。8 bitは256種類(28)を表現できる。

1 Bit2 Bit3 Bit
000000
101001
10010
11011
100
101
110
111

一般に、nn bitは2n2^n種類の情報を表現できる。

ビットパターン

このように、より複雑な情報を表現するために、複数のビットを並べるものはビット列(bit string)と呼ばれる。

コンピューターが扱うデータは、一般的に8, 16, 32, 64ビットなど、2の累乗のビット数で構成される。特定のビット数を持つデータは、ビットパターン(bit pattern)と呼ばれる。ビットパターンは,数値,文字,画像,音声など、様々なデータを表現するために使用される.

ビットパターンを2進数で表現すると非常に長くなる場合があるため、16進数を使用することも多い.1 byteは16進数では2桁で表現できる。例えば、8 bitのビットパターン101011002は、16進数ではAC16\texttt{AC}_{16}と表現される。

練習問題

情報量の最小単位は____である。一般に、nn bitは____の種類を表現できる。また、8 bitは1 ____に相当する。

まとめ

日本語英語
10進数decimal number
2進数binary number
8進数octal number
16進数hexadecimal number
位取り記数法positional notation

練習問題

解答例