最初に、機械語は固定サイズであることを覚えておいてください。 4と言ってください、そしてあなたの入力は:
+---+---+---+---+
| a | b | c | d |
+---+---+---+---+
次に、すべてを1ポジション左に押すと、次のようになります。
+---+---+---+---+
| b | c | d | X |
+---+---+---+---+
Xとして何を配置するかを質問しますか?
a
次に、すべてを1ポジション右に押します。
+---+---+---+---+
| X | a | b | c |
+---+---+---+---+
Xとして何を配置するかを質問しますか?
a
d
だいたい。
論理シフト 2による(左シフト)乗算、(右シフト)2による整数除算に対応します。
算術シフトは、符号付き数値の2の補数表現に関連するものです。この表現では、符号は左端のビットであり、算術シフトは符号を保持します(これは符号拡張と呼ばれます)。
Rotateは通常の数学的な意味を持たず、コンピューターでもほとんど使用されなくなった操作です。
違いは、右端の列でかなり説明されています。
>>
演算子です。算術シフトは、数値を符号付き整数(2の補数)として扱い、最上位ビットを「保持」し、最上位ビットが0の場合はゼロ、1の場合は1にシフトします。 Cの右シフト演算子は、シフトされる数値が負の場合、実装定義の動作をします。
たとえば、論理シフトを使用して3ビットを右シフトすると、2進数11100101
(10進数では-27、2の補数を想定)は00011100
(10進数の28)になります。これは明らかに混乱しています。算術シフトを使用すると、符号ビットが保持され、結果は11111100
(10進数の-4、-27/8にほぼ適切)になります。
最上位ビットは最下位ビットに置き換えられるため、回転はどちらも行いません。 Cには回転を行う演算子がありません。