離散数学(全101問中8問目)

数値を2進数で表すレジスタがある。このレジスタに格納されている正の整数xを10倍する操作はどれか。ここで,桁あふれは,起こらないものとする。

出典:平成29年秋期 問 1

  • xを2ビット左にシフトした値にxを加算し,更に1ビット左にシフトする。
  • xを2ビット左にシフトした値にxを加算し,更に2ビット左にシフトする。
  • xを3ビット左にシフトした値と,xを2ビット左にシフトした値を加算する。
  • xを3ビット左にシフトした値にxを加算し,更に1ビット左にシフトする。
正解 問題へ
分野:テクノロジ系
中分類:基礎理論
小分類:離散数学
ビットシフトを使用した乗算に関する問題です。

2進数のビット列は、左にnビットシフトすると元の値と比べて「2n倍」、右にnビットシフトすると「1/2n倍(2-n倍)」になるという性質があります。
01.gif
これを踏まえて各選択肢が何倍になるかを考えてみると、
  • [xを2ビット左シフト]
    x × 22 = x × 4 = 4x … ①
    [①にxを加算]
    4x + x = 5x … ②
    [②を1ビット左シフト]
    5x × 21 = 5x × 2 = 10x
    結果はxを10倍した値になるので、この操作が正解です。
  • [xを2ビット左シフト]
    x × 22 = x × 4 = 4x … ①
    [①にxを加算]
    4x + x = 5x … ②
    [②を2ビット左シフト]
    5x × 22 = 5x × 4 = 20x
    結果はxを20倍した値になるので誤りです。
  • [xを3ビット左シフト]
    x × 23 = x × 8 = 8x … ①
    [xを2ビット左シフト]
    x × 22 = x × 4 = 4x … ②
    [①と②を加算]
    8x + 4x = 12x … ②
    結果はxを12倍した値になるので誤りです。
  • [xを3ビット左シフト]
    x × 23 = x × 8 = 8x … ①
    [①にxを加算]
    8x + x = 9x … ②
    [②を1ビット左シフト]
    9x × 21 = 9x × 2 = 18x
    結果はxを18倍した値になるので誤りです。
したがって、正の整数 x を10倍する操作は「ア」になります。

この問題の出題歴


Pagetop