整数を8ビットの、2の補数表現で表しているとする。次のうち最も適切なものはどれか。
@ 011101012 + 000011002 はオーバーフローしないで計算できる。
A 21と−21の2の補数表現は、全ビットの0と1を交換したものである。
B 値を2倍にするのに、オーバーフローが起こらない限り、1ビット左シフトで実現できる。
C 表現できる範囲は、-128から128までである。
D 最も小さい値は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を超えることからも
オーバーフローすることが判る。
A2の補数は整数を2進数で表現し、全ビットを反転させて、1を加えた値である。
すなわち、 21 = 000101012 −21は 111010112 である。
B正しい。ちなみに1ビット右に動かすと、値は1/2になる。
C表現できる範囲は −128〜127である。
nビットの場合 −(2n-1) 〜 2n-1−1 までを表現できる。
D最も小さい値は 100000002 で10進数の−127である。
EXCELのマクロのご相談なら ファーストマクロ へ
タグ:2の補数