1. 数の表現
1.1. 10進法(10進表現)
ふだん私たちが使っている数の表現です。1つの桁に 0〜9 の10種類の記号を用います。各桁の値は基数(base、radix)の冪に対応します。
1 |
9 |
8 |
4 |
|---|---|---|---|
1000 |
100 |
10 |
1 |
-
表現と意味は別モノ:[1984]₁₀ は「10進表現された数 1984」を表す
-
10進表現 \(n\) 桁で表現できる数の範囲:\(0 \;\sim\; 10^n - 1\)(例:3桁では 0〜999)
1.2. 2進法(2進表現)
コンピューター等で使われている数の表現です。スイッチの on/off に対応し、1つの桁に 0 と 1 の2種類の記号のみを用います。
1 |
0 |
1 |
0 |
|---|---|---|---|
8 |
4 |
2 |
1 |
-
2進表現 \(n\) 桁で表現できる数の範囲:\(0 \;\sim\; 2^n - 1\)(例:3桁では 0〜7)
-
2進表現の1桁 = bit(binary digit)
1.3. n進表現
一般に1つの桁に n 種類の記号を用いる数の表現を n進法といい、n を基数(base、radix)といいます。
| 10進 | 2進 | 3進 | 4進 | 8進 | 16進 |
|---|---|---|---|---|---|
0 |
0 |
0 |
0 |
0 |
0 |
1 |
1 |
1 |
1 |
1 |
1 |
2 |
10 |
2 |
2 |
2 |
2 |
3 |
11 |
10 |
3 |
3 |
3 |
4 |
100 |
11 |
10 |
4 |
4 |
5 |
101 |
12 |
11 |
5 |
5 |
6 |
110 |
20 |
12 |
6 |
6 |
7 |
111 |
21 |
13 |
7 |
7 |
8 |
1000 |
22 |
20 |
10 |
8 |
9 |
1001 |
100 |
21 |
11 |
9 |
10 |
1010 |
101 |
22 |
12 |
A |
11 |
1011 |
102 |
23 |
13 |
B |
12 |
1100 |
110 |
30 |
14 |
C |
13 |
1101 |
111 |
31 |
15 |
D |
14 |
1110 |
112 |
32 |
16 |
E |
15 |
1111 |
120 |
33 |
17 |
F |
16 |
10000 |
121 |
100 |
20 |
10 |
16進表現では1桁に16種類の記号が必要なため、0〜9 に加えて A〜F の文字を用います(A=10, B=11, …, F=15)。
2進表現のコンパクトな表現として 16進表現がよく使われます:
-
16進表現の1桁 = 4進表現の2桁 = 2進表現の4桁(\(2^4 = 16\))
-
8進表現の1桁 = 2進表現の3桁(\(2^3 = 8\))
2. 基数変換
2.1. 2進表現から10進表現へ
2.1.1. 整数部の変換:重みを使う方法
各桁の値と桁の重み(2のべき乗)の積の和として求めます。
1 |
1 |
0 |
1 |
0 |
1 |
|---|---|---|---|---|---|
\(2^5\) |
\(2^4\) |
\(2^3\) |
\(2^2\) |
\(2^1\) |
\(2^0\) |
32 |
16 |
8 |
4 |
2 |
1 |
よって \({[110101]}_2 = {[53]}_{10}\)
2.1.2. 整数部の変換:Horner法
上位桁から「基数の2を掛けて次の桁を足す」操作を繰り返します。
|
|
10進表現の場合も同様に「上位桁から基数の10を掛けて次の桁を足す」ことで元の値が得られることがわかります。
2.1.3. 小数部の変換:重みを使う方法
小数点以下の各桁の重みは \(2^{-1},\, 2^{-2},\, 2^{-3},\, \ldots\) となります。
.1 |
0 |
1 |
1 |
|---|---|---|---|
\(2^{-1}\) |
\(2^{-2}\) |
\(2^{-3}\) |
\(2^{-4}\) |
0.5 |
0.25 |
0.125 |
0.0625 |
よって \({[0.1011]}_2 = {[0.6875]}_{10}\)
2.1.4. 小数部の変換:Horner法(逆方向)
下位桁から「基数の2で割って次の桁(上位側)を足す」操作を繰り返します。整数部のHorner法と方向が逆になります。
|
|
2.2. 10進表現から2進表現へ
2.2.1. 整数部の変換:2の冪による分解法
変換する数を、それ以下で最大の2の冪から順に「詰めて」いきます。使った2の冪に対応するビットを1とし、使わなかったビットを0とします。
53 以下で最大の2の冪は \(2^5 = 32\)。大きい順に順次差し引きます: \(53 - 32 = 21 \;\to\; 21 - 16 = 5 \;\to\; 5 - 4 = 1 \;\to\; 1 - 1 = 0\)
10進 |
2進 |
|
|---|---|---|
32 |
100000 |
= \(2^5\) |
16 |
010000 |
= \(2^4\) |
4 |
000100 |
= \(2^2\) |
1 |
000001 |
= \(2^0\) |
53 |
110101 |
よって \({[53]}_{10} = {[110101]}_2\)
2.2.2. 整数部の変換:繰り返し除算法
基数の2で0になるまで繰り返し割り、余りを下から順に並べます。
この方法は、整数の各桁を1つずつ求めていく手順として理解できます。
|
|
余りを下から上の順に並べると:1 1 0 1 0 1 → \({[110101]}_2\)
整数部のHorner法(2→10方向)が「上位桁から掛けて足す」なのに対し、この除算法は「下位桁から1桁ずつ取り出す」逆の手順に対応しています。
2.2.3. 小数部の変換:繰り返し乗算法
小数部に2を掛け、整数部(0 または 1)を記録し、小数部が0になるまで繰り返します。整数部を上から順に並べます。
計算 |
整数部 |
|---|---|
0.671875 × 2 = *1*.34375 |
1 |
0.34375 × 2 = *0*.6875 |
0 |
0.6875 × 2 = *1*.375 |
1 |
0.375 × 2 = *0*.75 |
0 |
0.75 × 2 = *1*.5 |
1 |
0.5 × 2 = *1*.0 |
1 |
整数部を上から順に並べると:1 0 1 0 1 1 → \({[0.101011]}_2\)
|
10進の小数がすべて有限桁の2進小数になるわけではありません。\(0.1_{10}\) は2進表現すると無限循環小数になります。これは、コンピューター上での浮動小数点演算における「表現誤差」の原因の1つです(次回以降の授業で扱います)。 |