No.71 数値を2進数で表すレジスタがある。
このレジスタに格納されている正の整数xを10倍する操作はどれか。
ここで,桁あふれは,起こらないものとする。
このレジスタに格納されている正の整数xを10倍する操作はどれか。
ここで,桁あふれは,起こらないものとする。
⭕️
❌
💾
🖊 | ☑️ |
⭕️ | [[ AnswerCalc[0] ]] % | A | [[ AnswerCalc[1] ]] |
ビットシフトを使用した乗算に関する問題です。
2進数のビット列は、左にnビットシフトすると元の値と比べて「2n倍」、右にnビットシフトすると「1/2n倍(2-n倍)」になるという性質があります。これを踏まえて各選択肢が何倍になるかを考えてみると、
2進数のビット列は、左にnビットシフトすると元の値と比べて「2n倍」、右にnビットシフトすると「1/2n倍(2-n倍)」になるという性質があります。これを踏まえて各選択肢が何倍になるかを考えてみると、
- xを2ビット左にシフトした値にxを加算し,更に1ビット左にシフトする。
[xを2ビット左シフト]
x × 22 = x × 4 = 4x … ①
[①にxを加算]
4x + x = 5x … ②
[②を1ビット左シフト]
5x × 21 = 5x × 2 = 10x
結果はxを10倍した値になるので、この操作が正解です。 - xを2ビット左にシフトした値にxを加算し,更に2ビット左にシフトする。
[xを2ビット左シフト]
x × 22 = x × 4 = 4x … ①
[①にxを加算]
4x + x = 5x … ②
[②を2ビット左シフト]
5x × 22 = 5x × 4 = 20x
結果はxを20倍した値になるので誤りです。 - xを3ビット左にシフトした値と,xを2ビット左にシフトした値を加算する。
[xを3ビット左シフト]
x × 23 = x × 8 = 8x … ①
[xを2ビット左シフト]
x × 22 = x × 4 = 4x … ②
[①と②を加算]
8x + 4x = 12x … ②
結果はxを12倍した値になるので誤りです。 - xを3ビット左にシフトした値にxを加算し,更に1ビット左にシフトする。
[xを3ビット左シフト]
x × 23 = x × 8 = 8x … ①
[①にxを加算]
8x + x = 9x … ②
[②を1ビット左シフト]
9x × 21 = 9x × 2 = 18x
結果はxを18倍した値になるので誤りです。
💾
✔️
[[ d.CommentTxt ]] |
< | > |
🥇 |