\((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\)となる。
AND, OR, XORの3種類の論理記号を使って、全加算器の論理回路を描いてください。
解答
\(S=(A\oplus B)\oplus C_0\),
\(C=AB+(A\oplus B)C_0\)
なので、論理回路図は以下のようになる。
\(S\) を作るために回路図の上側で \(A\oplus B\) を作っているので、\(C\) を作るときにこれを再利用して
としても正解。
\(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」