整数を8ビットの、2の補数表現で表しているとする。次のうち最も適切なものはどれか。
@ 011101012 + 000011002 はオーバーフローしないで計算できる。
A 21と-21の2の補数表現は、全ビットの0と1を交換したものである。
B 値を2倍にするのに、オーバーフローが起こらない限り、1ビット左シフトで実現できる。
C 表現できる範囲は、-128から128までである。
D 最も小さい値は111111112である。
B
2の補数は、整数を2進数で表現し、全ビットを反転させて、1を加えた値である。
あるいは 10000000 から整数を2進数で表した数を引いた値である。
符号付き整数を2の補数表現で表す場合、最上位ビットが0の時は、0または、正の数を表し、最上位ビットが1の時は、負の数を表す。
従って、8ビットであれば、0または正の整数は、
00000000 〜 01111111、すなわち 0〜127を表現できる。
一方、負の整数は、
10000000 〜 11111111、これらは2の補数表現であるため、-128 〜 -1を表現できる。
@ 011101012+000011002 = 100000012 となり最上位ビットが1になるためオーバーフローする。ちなみに10進数では117+12 = 129となり、127を超えることからもオーバーフローすることが判る。
A 2の補数は整数を2進数で表現し、全ビットを反転させて、1を加えた値である。すなわち、21は 000101012、-21は 111010112である。
B 正しい。ちなみに1ビット右に動かすと、値は1/2になる。
C 表現できる範囲は -128〜127である。nビットの場合 -(2n-1) 〜 2n-1−1 までを表現できる。
D 最も小さい値は 100000002 で10進数の -127である。
V−2 | 目次 | V−4 |