計算機算術

8ビットの符号付き整数で −8(1111 1000)を算術右シフトで1ビット右にずらした結果はどれか。

  1. A124(0111 1100)
  2. B−16(1111 0000)
  3. C−4(1111 1100)
答えと解説を見る

正解:C. −4(1111 1100)

算術シフト(算術右シフト)では、空いた最上位のビットに符号ビットをコピーするので、1111 1000 は 1111 1100 になり、これは2の補数で −4 です。負の数でも、右に1ビットずらすと2で割った値になります。最上位に0を入れる論理右シフトでは 0111 1100 = 124 となり、符号が変わってしまいます。−16は左に1ビットずらした結果です。C言語で符号付き整数を右シフトしたときにどちらになるかは、処理系に任されていた点にも注意が必要です。

  • A. 124は0を入れる論理右シフトの結果です。
  • B. −16は左に1ビットずらした結果です。
  • C. 正しい。符号ビットをコピーして1111 1100 = −4です。
この分野を解く 分野ページへ

計算機算術のほかの問題

  1. C言語で、int型の −7 / 2 と −7 >> 1(算術右シフトの場合)の結果の組み合わせとして正しいものはどれか。
  2. C言語で、32ビットの符号なし整数(unsigned int)の 0 から 1 を引いた結果はどれか。
  3. 符号なしの整数どうしの足し算で、結果が表せる範囲を超えた(桁あふれした)ことを判定する方法として正しいものはどれか。
  4. 浮動小数点数で、隣り合う表せる値どうしの間隔についての説明として正しいものはどれか。
  5. IEEE 754の単精度の浮動小数点数で、0から始めてすべての整数を正確に表せる上限はどれか。