第2種情報処理技術者試験 1998年度 = 平成10年度・春期 午前 問11

 10進数の-100を2の補数表現で8ビットのレジスタに記憶する。これを右に3ビット算術シフトした結果を10進数で表したものはどれか。

 ア -33  イ -13  ウ -12  エ 19

解答

 イ

解説

 2の補数は、すべてのビットを反転(0を1にして、1を0にする)した1の補数に1を加えることによって得られます。

   ┌─┬─┬─┬─┬─┬─┬─┬─┐    │0│1│1│0│0│1│0│0│   100    └─┴─┴─┴─┴─┴─┴─┴─┘         ↓ 全ビットを反転    ┌─┬─┬─┬─┬─┬─┬─┬─┐    │1│0│0│1│1│0│1│1│    └─┴─┴─┴─┴─┴─┴─┴─┘         ↓ 1を加える    ┌─┬─┬─┬─┬─┬─┬─┬─┐    │1│0│0│1│1│1│0│0│  -100    └─┴─┴─┴─┴─┴─┴─┴─┘

 算術シフトでは、最上位の符号用ビットが拡張されます。下図に示すように、3ビット右に算術シフトすると、全体が3ビット右にずれるとともに、上位ビットに符号ビット(この場合は1)が埋められます。

   ┌─┬─┬─┬─┬─┬─┬─┬─┐    ││0│0│1│1│1│0│0│    └─┴─┴─┴─┴─┴─┴─┴─┘       ↓ 3ビット右に算術シフト    ┌─┬─┬─┬─┬─┬─┬─┬─┐    ││0│0│1│1│    └─┴─┴─┴─┴─┴─┴─┴─┘

 3ビットシフトした値11110011を直接10進数に変換するのは大変ですから、2の補数を求めることによって、正の値の表現を求めましょう。

   ┌─┬─┬─┬─┬─┬─┬─┬─┐    │1│1│1│1│0│0│1│1│  -?    └─┴─┴─┴─┴─┴─┴─┴─┘         ↓ 全ビットを反転    ┌─┬─┬─┬─┬─┬─┬─┬─┐    │0│0│0│0│1│1│0│0│    └─┴─┴─┴─┴─┴─┴─┴─┘         ↓ 1を加える    ┌─┬─┬─┬─┬─┬─┬─┬─┐    │0│0│0│0│1│1│0│1│  13    └─┴─┴─┴─┴─┴─┴─┴─┘

 得られた0000110113ですから、変換前の11110011-13であることが分かります。


BohYoh.comトップページへ