正答3
解説
正解は3です。
2の補数表現の数を算術シフトし、その結果を引き算する問題です。
算術シフトは符号ビットを保ったまま行うシフトで、右に1ビットずらすごとに値は2で割られます。
【計算】
11010000を10進数に直すと、208−256=−48です。
右に2ビット算術シフトすると、空いた上位2ビットには符号ビットの1が入ります。
結果は11110100で、値は−48÷4=−12です。
00010100は10進数で20です。
20−(−12)=32です。
32を8ビットの2進数で表すと00100000です。
【選択肢別解説】
1:× 00001000は8で、20に−12を足した値です。
引くべきところを足しています。
2:× 00011111は31で、正しい計算からは得られない値です。
答えは32になります。
3:○ 20から−12を引いた32を2進数にした00100000で、正しい答えです。
4:× 11100000は−32で、論理シフトで上位に0を入れた場合の結果です。
論理シフトだと00110100(52)となり、20−52=−32になります。
【ポイント】
算術右シフトでは上位に符号ビットと同じ値を詰めます。
論理右シフトでは常に0を詰めるので、負の数では結果が変わる点に注意しましょう。