No.108 非負の2進数b1b2…bnを3倍にしたものはどれか。
⭕️
❌
💾
🖊 | ☑️ |
⭕️ | [[ AnswerCalc[0] ]] % | A | [[ AnswerCalc[1] ]] |
2進数はビット列全体を左へnビット分シフトすると2n倍、右へnビット分シフトすると1/2n倍になるという特徴を持っています。
この問題では、全体を1ビットだけ左にシフト(×2)してできるビット列に対して元のビット列の加算(+1)するという処理を組み合わせることで、3倍にする演算を行っています。
この問題では、全体を1ビットだけ左にシフト(×2)してできるビット列に対して元のビット列の加算(+1)するという処理を組み合わせることで、3倍にする演算を行っています。
- 左へ1ビット分シフトする。空白になる最右ビットは0で埋める。
b1b2…bn
↓
b1b2…bnO - 1.で得られたビット列に元のビット列を加算する。
b1b2…bnO+b1b2…bn
- b1b2…bn0+b1b2…bn
正しい。3倍になります。 - b1b2…bn00-1
左へ2ビットシフトしたあと-1しているので、結果は4倍-1です。3倍ではありません。 - b1b2…bn000
左へ3ビットシフトしているので、結果は23=8倍になります。 - b1b2…bn1
左へ1ビットシフトしたあと+1しているので、結果は2倍+1です。3倍ではありません。
💾
✔️
[[ d.CommentTxt ]] |
< | > |
🥇 |