本文へスキップ

技術士試験(情報工学部門)・情報技術者試験。ファーストマクロ。


Since 2016.4.19

平成28年度 技術士第一次試験問題【専門科目】

Ⅲ-3

整数を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