離散数学 (全108問中35問目)

No.35

8ビットの2進数11010000を右に2ビット算術シフトしたものを,00010100から減じた値はどれか。ここで,負の数は2の補数表現によるものとする。
  • 00001000
  • 00011111
  • 00100000
  • 11100000

分類

テクノロジ系 » 基礎理論 » 離散数学

正解

解説

シフト演算には、「論理シフト」と「算術シフト」があります。
論理シフト
符号ビットを含めてすべてのビットを左右のいずれかにずらし、空いたビットには0をセットする。
算術シフト
符号ビットを除外したビット列を左右のいずれかにずらし、左シフトであれば空いたビットには0,右シフトであれば空いたビットには符号ビットと同じビットをセットする。
この問題のシフト演算は算術シフトなので、2進数11010000を右に2ビットシフトする場合、最左の符号ビットを除外してビット列を2つ分右にずらし、空いたビットには符号ビットと同じ1をセットします。

 11010000→11110100

2の補数で表現されている11110100の絶対値を求めるには、再度ビット列を反転して1を加える操作を行えばいいので、

 11110100→00001011→00001100
 23+22=8+4=12

値は負数なので2進数11110100は10進数で「−12」ということになります。

同様に演算対象となっている2進数00010100は10進数で「20」になります。

 24+22=16+4=20

これら2つの10進数を使って減算を行うと、

 20−(−12)=32

10進数32を2進数で表すと、

 32=25=00100000

になります。
© 2010-2024 基本情報技術者試験ドットコム All Rights Reserved.

Pagetop