全加算器と状態遷移図 (ハードウェア分野)
平成16年春期 問1 問題確認
| 解説 |
|
設問1 まず、0011+0101の1桁目を考えます。 1 + 1 = 10 ですので、c = 0, x = 1, y = 1, c' = 1, s = 0になります。 (この計算で桁上がりした"1(c')"は、2桁目のcに入ります。) よって、11/0(xy/s)になります。この矢印をたどって"q1"に移動します。 q0 ⇒ q1 c(c') 1 ←2桁目へ桁上がり x 0 0 1 1 y 0 1 0 1 -------------- s 0 2桁目は、1 + 1 + 0 = 10 ですので、c = 1, x = 1, y = 0, c' = 1, s = 0になります。 よって、10/0 になり、"q1"を繰り返します。 q0 ⇒ q1 ⇒ q1 c(c') 1 1 ←桁上がり x 0 0 1 1 y 0 1 0 1 -------------- s 0 0 3桁目は、1 + 0 + 1 = 10 ですので、c = 1, x = 0, y = 1, c' = 1, s = 0になります。 よって、01/0 になり、"q1"を繰り返します。 q0 ⇒ q1 ⇒ q1 ⇒ q1 c(c') 1 1 1 ←桁上がり x 0 0 1 1 y 0 1 0 1 -------------- s 0 0 0 4桁目は、1 + 0 + 0 = 1 ですので、c = 1, x = 0, y = 0, c' = 0, s = 1になります。 よって、00/1になりますので、この矢印をたどって"q0"に移動します。 q0 ⇒ q1 ⇒ q1 ⇒ q1 ⇒ q0 c(c') 1 1 1 ←桁上がり x 0 0 1 1 y 0 1 0 1 -------------- s 1 0 0 0 上記のことから答えは"エ"になります。 設問2 まず、真の条件で解っているのは、s[i] ← x[i] xor y[i] です。 xor は、0 xor 0 = 0, 0 xor 1 = 1, 1 xor 0 = 1, 1 xor 1 = 0 を返すので、加算した答えの1の位の値が返されるのが解ります。 ( 0 + 0 = 0, 0 + 1 = 1, 1 + 1 = 10 ) 偽の条件で解ってるのは、s[i] ← not(x[i] xor y[i]) です。 これはxorの否定(not)ですので、xorが 1の時は0、0の時は1を返します。 つまり、xorで返された値に更に1を加えた値の1の位の答えと同じになります。 ( 0 xor 1 + 1 = 10, 1 xor 1 + 1 = 1 ) 上記のことから、この分岐の条件は、桁上がりの有無で分岐させないといけません。 問題の中に、"1を true, 0をfalse"と書いてあるのでこれで判断させることが解ります。 偽の条件の方を見てみると加算した1の位の値に1を加えた値になっていますのでこれが桁上がりがあった場合(true 1)になります。 よって、"a"は、"ア"の "sw = 0" になります。 桁上がりの有無を判定するための値をsw(分岐の条件)に格納しているところがないので、"b"と"c"にはその値を格納することが解ります。 "b"は、前の位の計算で桁上がりがない場合ですので、桁上がりが起こる"1(x) + 1(y)"の時のみswに1を格納すれば良い訳ですから答えは"キ"の"sw ← x[i] and y[i]"になります。 "c"は、桁上がりがあった場合ですので、設問1でいう、11/1, 10/1, 01/1, 00/0 に なるものになります。 よって、答えは"ク"の"sw ← x[i] or y[i]"になります。 |
koya様 ご投稿
メニューへ戻る