(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」をひとつ勝手につけたして、引き算をするという反則っぽいやり方も・・・自己責任でやってみてください。


この記事が気に入ったらサポートをしてみませんか?