整数を8ビットの、2の補数表現で表しているとする。次のうち最も適切なものはどれか。
① 011101012 + 000011002 はオーバーフローしないで計算できる。
② 21と-21の2の補数表現は、全ビットの0と1を交換したものである。
③ 値を2倍にするのに、オーバーフローが起こらない限り、1ビット左シフトで実現できる。
④ 表現できる範囲は、-128から128までである。
⑤ 最も小さい値は111111112である。
③
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を超えることからもオーバーフローすることが判る。
② 2の補数は整数を2進数で表現し、全ビットを反転させて、1を加えた値である。すなわち、21は 000101012、-21は 111010112である。
③ 正しい。ちなみに1ビット右に動かすと、値は1/2になる。
④ 表現できる範囲は -128~127である。nビットの場合 -(2n-1) ~ 2n-1-1 までを表現できる。
⑤ 最も小さい値は 100000002 で10進数の -127である。
Ⅲ-2 | 目次 | Ⅲ-4 |