整数を 8 ビットの,2 の補数表現で表しているとする。次のうち最も適切なものはどれか。
① 011101012 + 000011002 はオーバーフローしないで計算できる。
② 021 と -21 の 2 の補数表現は,全ビットの 0 と 1 を交換したものである。
③ 値を 2 倍にするのに,オーバーフローが起こらない限り,1 ビット左シフトで実現できる。
④ 表現できる範囲は,-128 から 128 までである。
⑤ 最も小さい値は 111111112 である。
答え
③
解説
2の補数とは、2進数で表現した数について、0と1を反転させて1を足したものになります。
(これは2の補数の正しい定義ではありませんが、こういう性質を持っています)
例えば、10進数の9を2進数で表すと1001ですが、この2の補数は0111になります。
10(10進数)→1001(2進数)→0110(ビット反転)→0111(2の補数)
また、以下のケースではオーバーフローとなり、正しく計算できません。
- 最上位ビットが0の数どうしを加算した結果、最上位ビットが1になる
(正の数の加算結果が負の数になる) - 最上位ビットが1の数どうしを加算した結果、最上位ビットが0になる
(負の数の加算結果が正の数になる)
① 011101012 + 000011002 はオーバーフローしないで計算できる。
100000112となり,オーバーフローしてしまいます。
② 021 と -21 の 2 の補数表現は,全ビットの 0 と 1 を交換したものである。
全ビットを交換して,1を足すと正負が反転します。
③ 値を 2 倍にするのに,オーバーフローが起こらない限り,1 ビット左シフトで実現できる。
適切です。
④ 表現できる範囲は,-128 から 128 までである。
−128(100000002)から 127(011111112)までです。
⑤ 最も小さい値は 111111112 である。
最も小さい値は,-128(100000002)です。