第1回 2進数と基数変換

人間が生み出したものはいろいろなもので表されている
しかし、コンピュータが扱えるのはON・OFFの違いだけ
  ↓
記録・送信のためにはこれらを0と1の並び (2進数) に置き換える必要がある

1. 10進数

概要

いわゆる普通の数。

整数よりも小数の方が一般的 (より広い範囲のものをあらわせる) なので、小数を分解して考えてみる。
「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(火) 正午です。提出によって出席・点数がつきます。