第1回 2進数と基数変換
人間が生み出したものはいろいろなもので表されている
- 文書 (日本語、英語、ドイツ語、...)
- 音楽 (音階、ボリューム、音色、...)
- 絵画 (輪郭、色合い、明るさ、...)
しかし、コンピュータが扱えるのはON・OFFの違いだけ
↓
記録・送信のためにはこれらを0と1の並び (2進数) に置き換える必要がある
1. 10進数
概要
いわゆる普通の数。
- 整数 : 46, -13, 365...
- 小数 : 38.5, -2.3, 3.14...
整数よりも小数の方が一般的 (より広い範囲のものをあらわせる) なので、小数を分解して考えてみる。
「205.16」という数値は、「2」「0」「5」「1」「6」という4つの数字と小数点でできている。
\(\begin{eqnarray}
&&205.16\\
=&&200 + 00 + 5 + 0.1 + 0.06\\
=&&2\times100 + 0\times 10 + 5\times 1 + 1\times 0.1 + 6\times 0.01\\
=&&2\times10^2 + 0\times 10^1 + 5\times 10^0 + 1\times 10^{-1} + 6\times 10^{-2}
\end{eqnarray}
\)
|
・・・(1)
|
つまり、「205.16」は「2」「0」「5」「1」「6」という数字にそれぞれ「\(10^x\)」という形のものをかけたものの足し算で表される。
このときの「10」のことを
基数という。
「10進数」という呼び方の
所以はこの基数「10」によるもの。
10進数で使われる数字、つまり「\(10^x\)」の前にかかる数字は 0~9 の10種類。
以下で説明する2進数、8進数、16進数と区別し、10進数であることを明示したい場合は「\((205.16)_{10}\)」のように書く。
課題1
「214.08」を(1)式のように分解した形で書いて下さい。
2. 2進数
概要
10進数の解説を踏まえ、基数を2にすれば
2進数ができる。
どちらの場合も何かと何かをかけたものを足した形で表せるが、違いは以下のようになる。
|
10進数 |
2進数 |
掛け算の左側 |
0~9 |
0~1 |
掛け算の右側 |
\(10^x\) |
\(2^x\) |
たとえば「\((101.11)_2\)」は以下のように分解して10進数に変換できる。
\(\begin{eqnarray}
&&(101.11)_2\\
=&&(100)_2 + (00)_2 + (1)_2 + (0.1)_2 + (0.01)_2\\
=&&1\times2^2 + 0\times2^1 + 1\times 2^0 + 1\times 2^{-1} + 1\times 2^{-2}\\
=&&(4)_{10} + (1)_{10} + (0.5)_{10} + (0.25)_{10}\\
=&&(5.75)_{10}
\end{eqnarray}
\)
|
・・・(2)
|
のようになる。
課題2
\((110.01)_2\)を10進数に変換して下さい。
変換の過程も書いて下さい。
3. 8進数
基数を8にすれば
8進数ができる。
10進数、2進数とあわせて比較すると以下のようになる。
|
10進数 |
2進数 |
8進数 |
掛け算の左側 |
0~9 |
0~1 |
0~7 |
掛け算の右側 |
\(10^x\) |
\(2^x\) |
\(8^x\) |
たとえば「\((73.5)_8\)」は以下のように分解して10進数に変換できる。
\(\begin{eqnarray}
&&(73.5)_8\\
=&&(70)_8 + (3)_8 + (0.5)_8\\
=&&7\times8^1 + 3\times8^0 + 5\times 8^{-1}\\
=&&(56)_{10} + (3)_{10} + (0.625)_{10}\\
=&&(59.625)_{10}
\end{eqnarray}
\)
|
・・・(3)
|
のようになる。
課題3
\((23.7)_8\)を10進数に変換して下さい。
変換の過程も書いて下さい。
4. 16進数
基数を16にすれば
16進数ができる。
10進数、2進数、8進数とあわせて比較すると以下のようになる。
|
10進数 |
2進数 |
8進数 |
16進数 |
掛け算の左側 |
0~9 |
0~1 |
0~7 |
0~F |
掛け算の右側 |
\(10^x\) |
\(2^x\) |
\(8^x\) |
\(16^x\) |
たとえば「\((\rm{B5.D})_{16}\)」は以下のように分解して10進数に変換できる。
\(\begin{eqnarray}
&&(\rm{B5.D})_{16}\\
=&&(\rm{B0})_{16} + (5)_{16} + (\rm{0.D})_{16}\\
=&&11\times16^1 + 5\times16^0 + 13\times 16^{-1}\\
=&&(176)_{10} + (5)_{10} + (0.8125)_{10}\\
=&&(181.8125)_{10}
\end{eqnarray}
\)
|
・・・(4)
|
のようになる。
課題4
\((\rm{3A.F})_{16}\) を10進数に変換して下さい。
変換の過程も書いて下さい。
5. 10進数から2進数への変換
概要
\((205.8125)_{10}\)
という10進数に対応する2進数は、整数部分と小数部分に分けて求められる。まず整数部分 205 は
2で割って余りを書き出す。0になるまで繰り返すという作業で2進数にする。書き出した余りを
下から順に読めば
\((11001101)_2\)
となり、これが整数部分を2進数にしたものになる (課題2の方法で逆に変換して検算すれば、これは128+64+8+4+1 = 205で確かに元の10進数に等しいことがわかる)。
|
|
|
|
|
余り |
2 |
) |
2 |
0 |
5 |
|
2 |
) |
1 |
0 |
2 |
1 |
2 |
) |
|
5 |
1 |
0 |
2 |
) |
|
2 |
5 |
1 |
2 |
) |
|
1 |
2 |
1 |
2 |
) |
|
|
6 |
0 |
2 |
) |
|
|
3 |
0 |
2 |
) |
|
|
1 |
1 |
|
|
|
|
0 |
1 |
つぎに、小数部分 0.8125 は
2をかけて整数部分を書き出す。小数部分がなくなるまで繰り返す という作業で2進数にする。書き出した整数部分を
上から順に読めば
\((0.1101)_2\)
となり、これが小数部分を2進数にしたものになる (課題2の方法で逆に変換して検算すれば、これは1/2+1/4+1/16 = 0.5+0.25+0.0625 = 0.8125で確かに元の10進数に等しいことがわかる)。
|
|
整数部分 |
0.8125\(\times\)2 = 1.625 |
|
1 |
0.625\(\times\)2 = 1.25 |
|
1 |
0.25\(\times\)2 = 0.5 |
|
0 |
0.5\(\times\)2 = 1.0 |
|
1 |
整数部分と小数部分を合わせて
\((205.8125)_{10} = (11001101.1101)_2\)
となる。
課題5
\((183.6875)_{10}\) を2進数に変換してください。
計算過程も書いて下さい。
6. 10進数から8進数への変換
概要
10進数を8進数にする手順も、基本的に10進数から2進数への変換と同じで、割る数・かける数が2から8に変わるだけ。
\((205.8125)_{10}\)
という10進数の整数部分 205 は
8で割って余りを書き出す。0になるまで繰り返すという作業で8進数にする。書き出した余りを
下から順に読めば
\((315)_8\)
となり、これが整数部分を8進数にしたものになる (課題3の方法で逆に変換して検算すれば、これは \(3\times64+1\times8+5=192+8+5=205\) で確かに元の10進数に等しいことがわかる)。
|
|
|
|
|
余り |
8 |
) |
2 |
0 |
5 |
|
8 |
) |
|
2 |
5 |
5 |
8 |
) |
|
|
3 |
1 |
|
|
|
|
0 |
3 |
つぎに、小数部分 0.8125 は
8をかけて整数部分を書き出す。小数部分がなくなるまで繰り返す という作業で8進数にする。書き出した整数部分を
上から順に読めば
\((0.64)_8\)
となり、これが小数部分を8進数にしたものになる (課題3の方法で逆に変換して検算すれば、これは6/8+4/64 = 0.75+0.0625 = 0.8125で確かに元の10進数に等しいことがわかる)。
|
|
整数部分 |
0.8125\(\times\)8 = 6.5 |
|
6 |
0.5\(\times\)8 = 4.0 |
|
4 |
整数部分と小数部分を合わせて
\((205.8125)_{10} = (315.64)_8\)
となる。
課題6
\((183.6875)_{10}\) を8進数に変換してください。
計算過程も書いて下さい。
7. 10進数から16進数への変換
概要
10進数を8進数にする手順も、2進数や8進数への変換と同じ。割る数・かける数が16に変わるだけ。
\((205.8125)_{10}\)
という10進数の整数部分 205 は
16で割って余りを書き出す。0になるまで繰り返すという作業で16進数にする。書き出した余りを
下から順に読めば
\(\rm{(CD)_{16}}\)
となり、これが整数部分を16進数にしたものになる (課題4の方法で逆に変換して検算すれば、これは \(12\times16+13 = 192+13 = 205\) で確かに元の10進数に等しいことがわかる)。
|
|
|
|
|
余り |
16 |
) |
2 |
0 |
5 |
|
16 |
) |
|
1 |
2 |
13 |
→ \(\rm{(D)_{16}}\) |
|
|
|
|
0 |
12 |
→ \(\rm{(C)_{16}}\) |
つぎに、小数部分 0.8125 は
16をかけて整数部分を書き出す。小数部分がなくなるまで繰り返す という作業で16進数にする。書き出した整数部分を
上から順に読めば
\((\rm{0.D})_{16}\)
となり、これが小数部分を16進数にしたものになる (課題4の方法で逆に変換して検算すれば、これは13/16 = 0.8125で確かに元の10進数に等しいことがわかる)。
|
|
整数部分 |
0.8125\(\times\)16 = 13.0 |
|
13 |
→ \(\rm{(D)_{16}}\) |
整数部分と小数部分を合わせて
\((205.8125)_{10} = (\rm{CD.D})_{16}\)
となる。
課題7
\((183.6875)_{10}\) を16進数に変換してください。
計算過程も書いて下さい。
補足
\(2^4=16\) なので、16進数の1桁は2進数の4桁に対応し、\(2^3=8\) なので8進数の1桁は2進数の3桁に対応する (テキスト5ページの表1.1)。
そのため、16進数↔2進数の変換や8進数↔2進数の変換は、10進数への変換のような分解をしなくても、桁ごとに置き換えるだけで済む。
2進数3桁と8進数1桁の対応は
2進数 |
8進数 |
\((000)_2\) |
\((0)_8\) |
\((001)_2\) |
\((1)_8\) |
\((010)_2\) |
\((2)_8\) |
\((011)_2\) |
\((3)_8\) |
\((100)_2\) |
\((4)_8\) |
\((101)_2\) |
\((5)_8\) |
\((110)_2\) |
\((6)_8\) |
\((111)_2\) |
\((7)_8\) |
のようになるので、例えば「5. 10進数から2進数への変換」の概要の結果の
\((205.8125)_{10} = (11001101.1101)_2\)
の整数部分を「011」「001」「101」、小数部分を「110」「100」のように小数点を基準に3桁ずつ区切って表の8進数に置き換えれば、
\((11001101.1101)_2 = (315.64)_8\)
となり、「6. 10進数から8進数への変換」の概要の結果と同じものが得られる。
同様に2進数4桁と16進数1桁の対応は
2進数 |
16進数 |
\((0000)_2\) |
\((0)_{16}\) |
\((0001)_2\) |
\((1)_{16}\) |
\((0010)_2\) |
\((2)_{16}\) |
\((0011)_2\) |
\((3)_{16}\) |
\((0100)_2\) |
\((4)_{16}\) |
\((0101)_2\) |
\((5)_{16}\) |
\((0110)_2\) |
\((6)_{16}\) |
\((0111)_2\) |
\((7)_{16}\) |
\((1000)_2\) |
\((8)_{16}\) |
\((1001)_2\) |
\((9)_{16}\) |
\((1010)_2\) |
\((\rm{A})_{16}\) |
\((1011)_2\) |
\((\rm{B})_{16}\) |
\((1100)_2\) |
\((\rm{C})_{16}\) |
\((1101)_2\) |
\((\rm{D})_{16}\) |
\((1110)_2\) |
\((\rm{E})_{16}\) |
\((1111)_2\) |
\((\rm{F})_{16}\) |
のようになるので、例えば「5. 10進数から2進数への変換」の概要の結果の
\((205.8125)_{10} = (11001101.1101)_2\)
の整数部分を「1100」「1101」、小数部分を「1101」のように小数点を基準に4桁ずつ区切って表の16進数に置き換えれば、
\((11001101.1101)_2 = (\rm{CD.D})_{16}\)
となり、「7. 10進数から16進数への変換」の概要の結果と同じものが得られる。
(これを使えば課題5の結果を使って課題6, 課題7を楽に行うこともできる)
提出
ノート・紙に解いた課題を撮影したものを以下のフォームから送信してください。
課題提出用フォーム
※ 締切は9/17(火) 正午です。提出によって出席・点数がつきます。