補数を使った計算(確認問題)

確認問題

補数を使って, 次の10進数, 2進数の計算を行いなさい。

① 9-6

② 72-24

この問題は、例題2より、10進数のまま補数を使って計算するもののようだが、その計算をする意味は殆ど無いので、コンピュータになったつもりで2進数にしてから補数を使って計算すること。そうすれば引き算は足し算でできる。10進数のままでは補数を出すときに引き算がどうしても必要だ。

① 9-6

9は2進数にすると1001である。 これを計算するには最低限5ビットが必要。(4ビットの正の数を表現するので) つまり、9は 01001 6は2進数にすると110である。 これもあわせて5ビットにすると 00110 2の補数にする。つまり 各ビットを反転して 11001 1を足して 11010 これを 01001 に加えると、 01001 +) 11010 00011 最高位でひとつこぼれて、00011 となる。 10進数にすると3となる。

② 72-24

72は2進数にすると1001000である。 これを計算するには最低限8ビットが必要。(7ビットの正の数を表現するので) つまり、72は 01001000 24は2進数にすると11000である。 これもあわせて8ビットにすると 00011000 2の補数にする。つまり 各ビットを反転して 11100111 1を足して 11101000 これを 01001000 に加えると、 01001000 +) 11101000 00110000 最高位でひとつこぼれて、00110000 となる。 10進数にすると48となる。(32+16)

③ (011)2-(001)2

011なので、これを計算するには最低限3ビットが必要。 引く数も3ビットなのでこのまま、001を 2の補数にする。つまり 各ビットを反転して 110 1を足して 111 これを 011 に加えると、 011 +) 111 010 最高位でひとつこぼれて、010 となる。 答えは問題にあわせて (010)2

④ (111)2-(101)2

111なので、これを計算するには 0111 として最低限4ビットが必要。 (最初のビットが1だと負の数と解釈される危険があるから) 引く数もこれに合わせて4ビットにするので、0101 これを2の補数にする。つまり 各ビットを反転して 1010 1を足して 1011 これを 0111 に加えると、 0111 +) 1011 0010 最高位でひとつこぼれて、0010 となる。 答えは問題にあわせて (010)2