(18)できるだけ少ない知識で解きたい人用「8ビットの2進数11010000を右に2ビット算術シフトしたものを,00010100から減じた値はどれか」
#基本情報技術者試験 #平成24年 #秋期 #問1 #シフト #算術シフト #2進数
8ビットの2進数11010000を右に2ビット算術シフトしたものを,00010100から減じた値はどれか。ここで,負の数は2の補数表現によるものとする。
ア 00001000
イ 00011111
ウ 00100000
エ 11100000
まず、シフトはシフトでも、算術シフトというやつには注意が必要。気をつけなきゃいけないことは、
・いちばん左側は符号ビットなので、動かさない
・右シフトでは、空いたビットには、いちばん左側と同じものを入れる
・左シフトでは、空いたビットには、0を入れる
です。
では、そのルールを守って、まずは「11010000を右に2ビット算術シフト」をやってみる。
11010000 ---> 11110100
あと、いちばん左側の符号ビットが、0ならば正の数、1ならば負の数と見分けることになっているので、この値は負の数ということもわかった。
次は引き算。00010100から、さっきシフトしたやつを引いて欲しいらしい。
2進数の引き算は、間違えやすいので、試しに10進数に変換してからやってみる。
00010100 ---> 4+16=20
11110100 ---> いちばん左が1なのでこれは負の数だから・・・
「負の数の場合は、2の補数表現にしている」ということが問題に書いてあるので、11110100を10進数にするには、反転と+1をしなきゃいけない。
11110100
反転 00001011
+1 00000001
-----------------------
00001100
こうやって出た00001100を10進数にして、マイナスをつける。
00001100 ---> 4+8=12 ---> -12
これで引き算をやってみる。
20 - (-12) = 20 + 12 = 32
10進数の32を、2進数にすると00100000なので、答えがみつかった。
もし、10進数にするのがめんどくさい!2進数の引き算でやりたい!という人は、左側に「1」をひとつ勝手につけたして、引き算をするという反則っぽいやり方も・・・自己責任でやってみてください。