10 進数の小数を 2 進数に変換します

[問題 NT-04] 2 進数表記

 $k$ 進数で表された数値 $x$ を $(x)_{k}$ と書くことにします。

 (1) $(7.25)_{10}$ を $2$ 進数で表してください。

 (2) $(7.2)_{10}$ を $2$ 進数で小数点以下 $7$ 桁まで表してください。

 必要なら電卓を使ってください。

問題 NT-04 のヒント

 $2$ 進数は $2$ ごとに繰り上がる $1$ と $0$ のみで表される数字です。
 $10$ 進数の整数 $0,\ 1,\ 2,\ 3,\ 4$ は 2 進数ではそれぞれ
 
\[0,\ 1,\ 10,\ 11,\ 100\]
のように表されます。 $10$ 進数 $N$ を
 
\[N=d_n 2^n+d_{n-1} 2^{n-1}+\ \cdots\ +d_1 2^1+d_02^0\]
と表したときの係数 $d_n$ が各桁を表すことになります:
 
\[\begin{align*}&(0)_{10}=0\times 2^0\ \Longrightarrow\ (0)_2\\[6pt]
&(1)_{10}=1\times 2^1\ \Longrightarrow\ (1)_{2}\\[6pt]
&(2)_{10}=1\times 2^1+0\times 2^0\ \Longrightarrow\ (10)_2\\[6pt]
&(3)_{10}=1\times 2^0+1\times 2^0\ \Longrightarrow\ (11)_2\\[6pt]
&(4)_{10}=1\times 2^2+0\times 2^1+0\times 2^0\ \Longrightarrow\ (100)_2
\end{align*}\]
 整数ならそれほど難しくないのですが、小数だとはたしてどうなるか ......
 実は (2) はかなりの難問です。

フェルマーの大定理―整数論の源流 (ちくま学芸文庫)

中古価格
¥262から
(2017/9/1 13:38時点)

問題 NT-04 の解答

(1) 最初に上の説明の通り $(7)_{10}$ を $2^n$ で表すと
 
\[(7)_{10}=1\times 2^2+1\times 2^1+1\times 2^0=(111)_2\]
と表記されます。計算技術的には簡略化された方法が知られているので、記事の後半で紹介しておきます。

 小数点以下は $\cfrac{1}{2^n}$ の項を作って表すことになります。
 電卓などで $\cfrac{1}{2^n}$ の数値を予め並べておきます。
 
\[\begin{align*}
&\frac{1}{2}=0.5,\quad \frac{1}{4}=0.25,\quad \frac{1}{8}=0.125,\quad \frac{1}{16}=0.0625,\quad\frac{1}{32}=0.03125\\[6pt]
&\frac{1}{64}=0.015625,\quad\frac{1}{128}=0.0078125,\quad\frac{1}{256}=0.0390625\end{align*}\]
 すると $0.25$ は
 
\[0.25=\frac{1}{4}=0\times\frac{1}{2^1}+1\times\frac{1}{2^2}=(0.01)_2\]
と表されます。したがって先の $7$ の $2$ 進数表示と合わせて
 
\[(7.25)_{10}=(111.01)_2\]
と表されることがわかります。小数点以下についても簡略化された計算法がありますので、記事下の補足を読んでおいてください。

(2) $0.25$ は比較的すっきり表せましたが、$2$ 進数で $0.2$ という数字は相性が悪く、無限級数になってしまいます(これがコンピュータの浮動小数点数演算の誤差の原因となっています)。問題では小数点以下 $7$ 桁まで求めよとなっているので、(1) で並べた数字を使って近似値を計算します。

 $0.2$ の中には $0.125$ が1つあるので、$\cfrac{1}{2^3}$ の位は $1$ です。
 そして $0.2$ から $0.125$ を引きます。

  $0.2 - 0.125 = 0.075$  ∴$\cfrac{1}{2^3}$ の桁は $1$

 以降同じようにして各桁の数字を求めていきます。

 
  $0.075 - 0.0625 = 0.0125$  ∴$\cfrac{1}{2^4}$ の桁は $1$

  $0.0125 \lt 0.03125$  ∴$\cfrac{1}{2^5}$ の桁は $0$

  $0.0125 \lt 0.015625$  ∴$\cfrac{1}{2^6}$ の桁は $0$

  $0.0125-0.0078125$  ∴$\cfrac{1}{2^7}$ の桁は $1$

 
 以上より、$(7.2)_{10}=(111.0011001)_2$ と近似できます。
 

[補足] 10 進数から 2 進数への変換方法

 まず整数部分から。$6$ を例にとって計算してみます。
 まず $6$ を $2$ で割り、商が $0$ になるまで順に $2$ で割っていきます。

  $6/2 = 3$ 余り $0$
  $3/2 = 1$ 余り $1$
  $1/2 = 0$ 余り $1$

 そして余りを下から順に並べて $(110)_2$ が得られます。

 小数点以下の数は整数なるまで順に小数部分に $2$ をかけていきます。
 そして掛け算の結果が $1$ 未満ならその桁は $0$, $1$ 以上ならその桁は $1$ となります。
 たとえば $10$ 進数で $0.25$ だと、

  $0.25 \times 2 = 0.5$ : $0$ (小数点以下 $1$ 位)
  $0.5 \times 2 = 1$   : $1$ (小数点以下 $2$ 位)

となって、上から並べて $(0.01)_2$ となります。 $10$ 進数で $0.2$ ならば、

  $0.2 \times 2 = 0.4$ : $0$ (小数点以下 $1$ 位)
  $0.4 \times 2 = 0.8$ : $0$ (小数点以下 $2$ 位)
  $0.8 \times 2 = 1.6$ : $1$ (小数点以下 $3$ 位)
  $0.6 \times 2 = 1.2$ : $14$ (小数点以下 $4$ 位)
  $0.2 \times 2 = 0.4$ : $0$ (小数点以下 $5$ 位)

のように循環することが簡単にわかります:
 
\[(0.2)_{10}=(0.001100110011......)_2\]
 ≫ [問題05] 包除原理 ≫ 数学演習問題

スポンサーリンク
スポンサーリンク
末尾広告
末尾広告

コメントをどうぞ

メールアドレスが公開されることはありません。

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください