計算機算術
8ビットの符号付き整数で −8(1111 1000)を算術右シフトで1ビット右にずらした結果はどれか。
- A124(0111 1100)
- B−16(1111 0000)
- 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です。