《機械》〈情報伝送及び処理〉[H22:問18]N進法の演算及び2進法の出力電圧値への換算に関する計算問題

【問題】

【難易度】★★★★☆(やや難しい)

数の表現法について,次の(a)及び(b)に答えよ。

(a) \( 10 \ \)進法で表される正の整数\( \ N \ \)は,\( \ 10 \ \)進法の\( \ 2 \ \)以上の整数\( \ r \ \)を用いて,次式のように表すことができる。
\[
\begin{eqnarray}
N &=&a_{n}r^{n}+a_{n-1}r^{n-1}+\cdots +a_{1}r+a_{0} \\[ 5pt ] \end{eqnarray}
\] ただし,\( \ a_{i} \ \)は整数であり,\( \ 0≦ a_{i}<r \left( i = 0,1, \cdots, n \right) \ \)である。
このとき,\( \ N \ \)を\( \ r \ \)進法で次のように表現することとする。
\[
\begin{eqnarray}
\left( a_{n}a_{n-1} \cdots a_{2}a_{1}a_{0}\right) _{r} \\[ 5pt ] \end{eqnarray}
\] この表現方法によって次の計算が成り立つとき,\( \ r \ \)の値として正しいのは次のうちどれか。
\[
\begin{eqnarray}
\left( 122\right) _{r}-\left( 42\right) _{r}=\left( 40\right) _{r} \\[ 5pt ] \end{eqnarray}
\]

 (1) \( \ 5 \ \)  (2) \( \ 6 \ \)  (3) \( \ 7 \ \)  (4) \( \ 8 \ \)  (5) \( \ 9 \ \)

(b) \( 8 \ \)ビットの固定長で,正負のある\( \ 2 \ \)進法の数値を表現する場合,次のような①及び②で示す方式がある。 また,\( \ \mathrm {D-A} \ \)コンバータにおいては次の③で示す方式が用いられる。

① 最上位ビット(左端のビット,以下\( \ \mathrm {MSB} \ \)という)を符号ビットとして,残りのビットでその数の絶対値を表す方式は,絶対値表示方式と呼ばれる。この場合,\( \ \mathrm {MSB=0} \ \)が正(+),\( \ \mathrm {MSB=1} \ \)が負(-)と約束すると,\( \ 10 \ \)進数の\( \ -8 \ \)は\( \ \fbox {  (ア)  } \ \)となる。

② \(7 \ \)ビット長で表された正の数\( \ n \ \)に対して, \( \ -n \ \)を\( \ 8 \ \)ビット長の\( \ n \ \)の\( \ 2 \ \)の補数で表す方式がある。この方式による場合,\( \ 10 \ \)進数の\( \ -8 \ \)は\( \ \fbox {  (イ)  } \ \)となる。この方式においても,\( \ \mathrm {MSB=1} \ \)は負の整数,\( \ \mathrm {MSB=0} \ \)は正の整数を示すことになる。この方式は,\( \ 2 \ \)進数の減算に適している。

③ \( \mathrm {D-A} \ \)コンバータでは,ディジタル入力量とアナログ出力量が比例の関係にある。\( \ 8 \ \)ビットの\( \ \mathrm {D-A} \ \)コンバータではディジタル入力量として,\( \ \left( 1000 \ 0000\right) _{2} \ \)を与えた場合に,\( \ 0.0000 \ \mathrm {[V]} \ \)が出力されるようにしたオフセット・バイナリ・コードを用いることが多い。 この場合,出力電圧が正のときは,\( \ \mathrm {MSB=1} \ \)となり,負のときは,\( \ \mathrm {MSB=0} \ \)となる。

ディジタル入力値が\( \ \left( 0000 \ 0000\right) _{2} \ \)のときのアナログ出力値が\( \ -5.0000 \ \mathrm {[V]} \ \)であるオフセット・バイナリ・コードの\( \ \mathrm {D-A} \ \)コンバータでは,ディジタル入力値が\( \ \left( 0111 \ 1000\right) _{2} \ \)のときの出力電圧値は\( \ \fbox {  (ウ)  } \ \mathrm {[V]} \ \)となる。

上記の記述中の空白箇所 (ア),(イ)及び(ウ)に当てはまる数値として,正しいものを組み合わせたのは次のうちどれか。
\[
\begin{array}{cccc}
& (ア) & (イ) & (ウ) \\
\hline
(1) &  \left( 1000 \ 1000\right) _{2}  &  \left( 1000 \ 0111\right) _{2}  &  -0.2734  \\
\hline
(2) &  \left( 1111 \ 1000\right) _{2}  &  \left( 1000 \ 1000\right) _{2}  &  -0.3125  \\
\hline
(3) &  \left( 1000 \ 1000\right) _{2}  &  \left( 1111 \ 1000\right) _{2}  &  -0.3125  \\
\hline
(4) &  \left( 1111 \ 1000\right) _{2}  &  \left( 1000 \ 0111\right) _{2}  &  -0.3125  \\
\hline
(5) &  \left( 1000 \ 1000\right) _{2}  &  \left( 1111 \ 1000\right) _{2}  &  -0.2734  \\
\hline
\end{array}
\]

【ワンポイント解説】

進数の演算に関する問題です。
(a)は比較的標準からやや易しめの問題ですが,(b)がやや難易度が高い問題かと思います。
合格のためには(a)は確実に得点しておくようにしましょう。

1.主な進数の対応表
コンピュータ等のディジタル信号は主に\( \ 2 \ \)進数が使用されるため,電験でも基数変換は出題されます。
\( \ 2 \ \)進数,\( \ 8 \ \)進数,\( \ 10 \ \)進数,\( \ 16 \ \)進数の対応表は下表の通りとなります。表を覚えるのではなくルールを理解するようにしましょう。
\[
\begin{array}{|r|r|r|r|}
\hline
 2 \ 進数  & 8 \ 進数  & 10 \ 進数  & 16 \ 進数  \\
\hline
0 & 0 & 0 & 0 \\
\hline
1 & 1 & 1 & 1 \\
\hline
10 & 2 & 2 & 2 \\
\hline
11 & 3 & 3 & 3 \\
\hline
100 & 4 & 4 & 4 \\
\hline
101 & 5 & 5 & 5 \\
\hline
110 & 6 & 6 & 6 \\
\hline
111 & 7 & 7 & 7 \\
\hline
1000 & 10 & 8 & 8 \\
\hline
1001 & 11 & 9 & 9 \\
\hline
1010 & 12 & 10 & \mathrm {A} \\
\hline
1011 & 13 & 11 & \mathrm {B} \\
\hline
1100 & 14 & 12 & \mathrm {C} \\
\hline
1101 & 15 & 13 & \mathrm {D} \\
\hline
1110 & 16 & 14 & \mathrm {E} \\
\hline
1111 & 17 & 15 & \mathrm {F} \\
\hline
10000 & 100 & 16 & 10 \\
\hline
\end{array}
\]

2.\( \ 10 \ \)進数から\( \ 2 \ \)進数への変換
\( \ 10 \ \)進数から\( \ 2 \ \)進数への変換は,\( \ 2 \ \)で割った余りを下から順に並べると求められます。
具体的に\( \ 10 \ \)進数の\( \ \left( 30\right) _{10} \ \)を\( \ 2 \ \)進数へ変換すると,
\[
\begin{array}{cccc}
2) & 30 & & & \\
\hline
2) & 15 & \cdots & 0 \\
\hline
2) & 7 & \cdots & 1 \\
\hline
2) & 3 & \cdots & 1 \\
\hline
2) & 1 & \cdots & 1 \\
\hline
& 0 & \cdots & 1 \\
\end{array}
\] ゆえに,
\[
\begin{eqnarray}
\left( 30\right) _{10} &=&\left( 11110\right) _{2} \\[ 5pt ] \end{eqnarray}
\] となります。\( \ 8 \ \)進数や\( \ 16 \ \)進数等任意の\( \ N \ \)進数への変換も同様に行うことができます。

3.\( \ 2 \ \)進数から\( \ 10 \ \)進数への変換
\( \ 2 \ \)進数を\( \ 10 \ \)進数にするためには各桁に\( \ 2^{x}(x=0,1,2・・・) \ \)乗をかけて導出できます。
例えば,\( \ 2 \ \)進数の\( \ \left( 101010\right) _{2} \ \)を\( \ 10 \ \)進数へ変換すると,
\[
\begin{eqnarray}
\left( 101010\right) _{2}&=&1\times 2^{5}+0\times 2^{4}+1\times 2^{3}+0\times 2^{2}+1\times 2^{1}+0\times 2^{0} \\[ 5pt ] &=&32+0+8+0+2+0 \\[ 5pt ] &=&42 \\[ 5pt ] \end{eqnarray}
\] と求められます。\( \ 8 \ \)進数や\( \ 16 \ \)進数等任意の\( \ N \ \)進数も同様に求められます。

4.補数
任意の\( \ N \ \)進数において,ある数に加えるとちょうど桁が上がる数を\( \ N \ \)の補数といい,例えば\( \ 10 \ \)進数でいうと,\( \ 3 \ \)と\( \ 7 \ \)や\( \ 4 \ \)と\( \ 6 \ \)となる関係を\( \ 10 \ \)の補数といいます。
\( \ 2 \ \)進数においては,例えば\( \ \left( 1001 \right) _{2} \ \)に\( \ \left( 0111 \right) _{2} \ \)を加えると\( \ \left( 10000 \right) _{2} \ \)になるため,\( \ \left( 0111 \right) _{2} \ \)は\( \ \left( 1001 \right) _{2} \ \)の\( \ 2 \ \)の補数といいます。
\( \ 2 \ \)の補数の求め方は,各桁を反転して\( \ 1 \ \)を加える下記手法が一般的です。
\[
\begin{array}{cccccc}
(元の数)& 1 & 0 & 0 & 1 & &\\[ 5pt ] & 0 & 1 & 1 & 0 & ← &各桁反転 \\[ 5pt ] ( \ 2 \ の補数)& 0 & 1 & 1 & 1 & ← & \ 1 \ を加える \\[ 5pt ] \end{array}
\]

【解答】

(a)解答:(2)
ワンポイント解説「3.\( \ 2 \ \)進数から\( \ 10 \ \)進数への変換」の通り,各選択肢の進数について\( \ 10 \ \)進数に変換して左辺右辺を比較すると,
(1)
\[
\begin{eqnarray}
\left( 122\right) _{5}-\left( 42\right) _{5}&=&\left( 1\times 5^{2}+2\times 5^{1}+2\times 5^{0}\right) -\left( 4\times 5^{1}+2\times 5^{0}\right) \\[ 5pt ] &=&\left( 25+10+2\right) -\left( 20+2\right) \\[ 5pt ] &=&15 \\[ 5pt ] \left( 40\right) _{5}&=& 4\times 5^{1}+0\times 5^{0} \\[ 5pt ] &=&20 \\[ 5pt ] \end{eqnarray}
\] (2)
\[
\begin{eqnarray}
\left( 122\right) _{6}-\left( 42\right) _{6}&=&\left( 1\times 6^{2}+2\times 6^{1}+2\times 6^{0}\right) -\left( 4\times 6^{1}+2\times 6^{0}\right) \\[ 5pt ] &=&\left( 36+12+2\right) -\left( 24+2\right) \\[ 5pt ] &=&24 \\[ 5pt ] \left( 40\right) _{6}&=& 4\times 6^{1}+0\times 6^{0} \\[ 5pt ] &=&24 \\[ 5pt ] \end{eqnarray}
\] (3)
\[
\begin{eqnarray}
\left( 122\right) _{7}-\left( 42\right) _{7}&=&\left( 1\times 7^{2}+2\times 7^{1}+2\times 7^{0}\right) -\left( 4\times 7^{1}+2\times 7^{0}\right) \\[ 5pt ] &=&\left( 49+14+2\right) -\left( 28+2\right) \\[ 5pt ] &=&35 \\[ 5pt ] \left( 40\right) _{7}&=& 4\times 7^{1}+0\times 7^{0} \\[ 5pt ] &=&28 \\[ 5pt ] \end{eqnarray}
\] (4)
\[
\begin{eqnarray}
\left( 122\right) _{8}-\left( 42\right) _{8}&=&\left( 1\times 8^{2}+2\times 8^{1}+2\times 8^{0}\right) -\left( 4\times 8^{1}+2\times 8^{0}\right) \\[ 5pt ] &=&\left( 64+16+2\right) -\left( 32+2\right) \\[ 5pt ] &=&48 \\[ 5pt ] \left( 40\right) _{8}&=& 4\times 8^{1}+0\times 8^{0} \\[ 5pt ] &=&32 \\[ 5pt ] \end{eqnarray}
\] (5)
\[
\begin{eqnarray}
\left( 122\right) _{9}-\left( 42\right) _{9}&=&\left( 1\times 9^{2}+2\times 9^{1}+2\times 9^{0}\right) -\left( 4\times 9^{1}+2\times 9^{0}\right) \\[ 5pt ] &=&\left( 81+18+2\right) -\left( 36+2\right) \\[ 5pt ] &=&63 \\[ 5pt ] \left( 40\right) _{9}&=& 4\times 9^{1}+0\times 9^{0} \\[ 5pt ] &=&36 \\[ 5pt ] \end{eqnarray}
\] となるので,左辺と右辺が等しくなる\( \ r=6 \ \)が正答となる。

(b)解答:(3)
(ア)
ワンポイント解説「1.主な進数の対応表」の通り\( \ \left( 8 \right) _{10}=\left( 1000 \right) _{2} \ \)であり,題意より\( \ 8 \ \)ビット固定長\( \ \mathrm {MSB} \ \)を除く\( \ 7 \ \)ビットで表せば\( \ \left( 8 \right) _{10}=\left( 000 \ 1000 \right) _{2} \ \)となるので,\( \ \mathrm {MSB=1} \ \)が負(-)であるから,\( \ \left( -8 \right) _{10}=\left( 1000 \ 1000 \right) _{2} \ \)と求められる。

(イ)
\( \ 7 \ \)ビットで正の数\( \ 8 \ \)を\( \ 2 \ \)進数で表すと,\( \ \left( 8 \right) _{10}=\left( 000 \ 1000 \right) _{2} \ \)であり,ワンポイント解説「4.補数」の通り,\( \ 2 \ \)の補数を求めると,\( \ \left( -8 \right) _{10}=\left( 1111 \ 0111 \right) _{2}+\left( 0000 \ 0001 \right) _{2}=\left( 1111 \ 1000 \right) _{2} \ \)と求められる。

(ウ)
問題文に示されている各\( \ 2 \ \)進数を\( \ 10 \ \)進数に変換すると,
\[
\begin{eqnarray}
\left( 1000 \ 0000\right) _{2}&=&1\times 2^{7}+0\times 2^{6}+0\times 2^{5}+0\times 2^{4}+0\times 2^{3}+0\times 2^{2}+0\times 2^{1}+0\times 2^{0} \\[ 5pt ] &=&128 → 0.0000 \ \mathrm {[V]} \\[ 5pt ] \left( 0000 \ 0000\right) _{2}&=&0\times 2^{7}+0\times 2^{6}+0\times 2^{5}+0\times 2^{4}+0\times 2^{3}+0\times 2^{2}+0\times 2^{1}+0\times 2^{0} \\[ 5pt ] &=&0 → -5.0000 \ \mathrm {[V]} \\[ 5pt ] \left( 0111 \ 1000\right) _{2}&=&0\times 2^{7}+1\times 2^{6}+1\times 2^{5}+1\times 2^{4}+1\times 2^{3}+0\times 2^{2}+0\times 2^{1}+0\times 2^{0} \\[ 5pt ] &=&0+64+32+16+8+0+0+0 \\[ 5pt ] &=&120 \\[ 5pt ] \end{eqnarray}
\] となる。これより,アナログ出力値はディジタル入力値が\( \ 1 \ \)減る毎に\( \ \displaystyle \frac {5}{128} \ \mathrm {[V]} \ \)減っていくことがわかるので,ディジタル入力値が\( \ \left( 0111 \ 1000\right) _{2}=120 \ \)のときのアナログ出力値は,
\[
\begin{eqnarray}
0-\frac {5}{128}\times 8 &=&-0.3125 \ \mathrm {[V]} \\[ 5pt ] \end{eqnarray}
\] と求められる。