問1 8ビットの2進数11010000を右に2ビット算術シフトしたものを、00010100から減じた値はどれか。ここで、負の数は2の補数表現によるものとする。
ア 00001000
イ 00011111
ウ 00100000
エ 11100000
解答にある2進数を10進数になおしておこう。
ア⇒8
イ⇒31
ウ⇒32
エ⇒-32
算術シフトは【符号ビットはそのまま】なので、11010000を右に2ビットずらせば11110100となる。
一番左のビットが1の場合は、負の数なのでまず0と1を反転させる。
11110100⇒00001011
これが1の補数表現である。
これに+1したものが2の補数表現となる。
つまり00001100。これを10進数であらわすと「12」で、負の数なので「-12」。
あとは問題にある00010100である「20」から減じる。
20-(-12)は32なので、正解はウになる。
文章にすると煩雑に見えるが、やっている操作は大したことはない。
覚えるべきことは、算術シフトは【符号ビットはそのまま】という事と、補数表現は【反転したものに+1】すれば2の補数という事だけである。
2進数の計算は、計算問題の中でもっとも優しいものなので、2~3度練習しておけば確実に点数に繋がる。
捨てるにはもったいない問題である。