離散数学 (全52問中50問目)

No.50

数値を2進数で表すレジスタがある。このレジスタに格納されている正の整数 x を10倍する操作はどれか。ここで,シフトによるあふれ(オーバフロー)は,起こらないものとする。
  • xを2ビット左にシフトした値にxを加算し,更に1ビット左にシフトする。
  • xを2ビット左にシフトした値にxを加算し,更に2ビット左にシフトする。
  • xを3ビット左にシフトした値と,xを2ビット左にシフトした値を加算する。
  • xを3ビット左にシフトした値にxを加算し,更に1ビット左にシフトする。
  • [この問題の出題歴]
  • 基本情報技術者 H20春期 問4
  • 基本情報技術者 H29秋期 問1

分類

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

正解

解説

ビットシフトを使用した乗算に関する問題です。

2進数のビット列は、左にnビットシフトすると 元の値と比べて2n倍,右にnビットシフトすると 1/(2n)倍になるという性質があります。これを頭に入れて各選択肢が何倍になるかを考えてみると、
  • (22+1)×21=(4+1)×2=5×2=10倍
  • (22+1)×22=(4+1)×4=20倍
  • (23)+22=8+4=12倍
  • (23+1)×21=(8+1)×2=18倍
したがって正の整数 x を10倍する操作は「xを2ビット左にシフトした値にxを加算し,更に1ビット左にシフトする。」になります。
© 2010-2018 応用情報技術者試験ドットコム All Rights Reserved.

Pagetop