第8回 課題解答

課題1

\((1011)_2 +(1001)_2\) を計算してください。筆算による計算過程も書いてください。

解答
筆算は以下のようになる (小さい1は繰り上がりをあらわす)。
1 0 1 1
+ 1 0 0 1
1 1 1
1 0 1 0 0
よって \((1011)_2 +(1001)_2\)\(=(10100)_2\)となる。

課題2

AND, OR, XORの3種類の論理記号を使って、全加算器の論理回路を描いてください。

解答
\(S=(A\oplus B)\oplus C_0\), \(C=AB+(A\oplus B)C_0\) なので、論理回路図は以下のようになる。



\(S\) を作るために回路図の上側で \(A\oplus B\) を作っているので、\(C\) を作るときにこれを再利用して


としても正解。

課題3

自分の学籍番号を \(A\)とし、\(C_{p10A}\) を求めてください (導出過程も書いてください)。

解答
人によって正解は異なる。
たとえば \(A=3124085\) なら、それぞれの桁で「足して9になる値」をとれば \(C_{p9A}=6875914\) が得られる。
これに1を足せば \(C_{p10A}=6875915\) が得られる。
単純に \(C_{p10A}\)\(=10000000\)\(-3124085\)\(=678915\) でも求められる。

課題4

\(B=(10111101)_2\) とした場合の、\(C_{p2B}\) を求めてください (導出過程も書いてください)。

解答
\(B\) のそれぞれの桁の0を1に、1を0にすると \(C_{p1B}=(01000010)_2\) が得られる。
これに1を足せば \(C_{p2B}=(01000011)_2\) が得られる。
\(C_{p2B}\)\(=(100000000)_2\)\(-(10111101)_2\) でも求められるが、繰り下がりの計算が面倒で間違えやすいので上記の方法の方が楽で確実。

課題5

\(A=(13)_{10}\) のとき、2進数5ビットの2の補数表示を使って \(-A\) を表したものを書いてください (導出過程も書いてください)。

解答
\(A=(13)_{10}=(01101)_2\) なので、\(C_{p1A}=(10010)_2\) となる。
\(C_{p2A}\) はこれに1を加えたものであり、さらに \(-A\) に等しい。
よって、 \(-A=(10011)_2\) となる。

課題6

\(A=(0101)_2\), \(B=(0110)_2\) のとき、補数を使って \(A-B\) を計算してください (導出過程も書いてください)。
ただし、\(A\), \(B\) どちらも2進数4ビットの2の補数表示で表されているものとします。

解答
\(B=(0110)_2\) なので、\(C_{p1B}=(1001)_2\) となる。
\(-B\) は \(C_{p2B}\) に等しく、これは \(C_{p1B}\) に1を加えたものである。
よって

\( \begin{eqnarray} && A-B\\ =&& A+(-B)\\ =&& (0101)_2+(1001)_2+(1)_2\\ =&& (0101)_2+(1010)_2\\ =&& (1111)_2\\ =&& (-1)_{10} \end{eqnarray} \)

となる (最後の行の変換はテキストの表7.3から)。よって
\(A-B=-1\)

表に頼らずに10進数にする方法
最上位ビットが 1 なのでこれが負の数であることはわかる。
その場合は残り3桁を2の補数として読めばよい。
\((111)_2\) の1の補数は \((000)_2\)
\((111)_2\) の2の補数はそれに1を加えた \((001)_2\)
なので、絶対値が「1」であることが分かる。
最後の答えはそれにマイナスの符号をつけて「-1」