1. ホーム
  2. bit-manipulation

[解決済み] 論理右シフト、算術右シフト、右回転の違いについて

2022-03-13 05:19:35

質問

ハッカーの愉しみ」を読んでいるのですが、論理右シフト、算術右シフト、右回転の違いがわからなくて困っています。簡単すぎる質問かもしれませんが、ご容赦ください。

解決方法は?

まず、機械語の大きさは一定であることを思い出してください。例えば4で、入力は以下の通りです。

+---+---+---+---+
| a | b | c | d |
+---+---+---+---+

そして、すべてを1つ左の位置に押し出すと、次のようになります。

+---+---+---+---+
| b | c | d | X |
+---+---+---+---+

質問 Xとして何を入れるか?

  1. を付けて シフト 0を入れる
  2. 回転させる 置く a

今度は、すべてを1つ右の位置に押して与えてください。

+---+---+---+---+
| X | a | b | c |
+---+---+---+---+

質問 Xとして何を入れるか?

  1. を付けて 論理シフト 0を入れる
  2. を付けて 算術シフト 置く a
  3. 回転させる 置く d

大まかには

論理シフト は、(左シフト)2の乗算、(右シフト)2の整数の除算に相当する。

算術シフト は、符号付き数値の2の補数表現に関連するものです。この表現では、符号は左端のビットであり、算術シフトによって符号が保持されます(これを符号拡張と呼びます)。

回転させる は、通常の数学的意味を持たず、コンピュータでもほとんど使われない演算である。