シフト操作は、バイナリの通常のローシフトです。シフト操作は多くの素晴らしい効果をデザインすることができ、グラフィックスや画像プログラミングで広く使用されています。
- 「<<」演算子
「<<」演算子は左シフト操作を実行します。シフト動作中、符号ビットは常に変更されません。右側に空いている位置がある場合は、自動的に0で埋められ、32ビットを超える値は自動的に破棄されます。
数値5を2桁左に移動すると、戻り値は20になります。
console.log(5 << 2); //返回值20
- 1
図に示すように、式を使用してデモンストレーションします。
思考:为啥没有<<<呢
因为左位移是填补右边空出的位,符号位不影响它的值哦
- 1
- 2
- 「>>」演算子
「>>」演算子は、符号付き右シフト操作を実行します。左シフト操作とは逆に、32ビット数のすべての有効ビットを全体として右にシフトし、符号ビットの値を使用して空のビットを埋めます。移動中に超過した値は破棄されます。
1000の値を8ビット右にシフトすると、戻り値は3になります。
console.log(1000 >> 8); //返回值3
- 1
図に示すように、式を使用してデモンストレーションします。
値-1000を8ビット右にシフトすると、戻り値は-4になります。
console.log(-1000 >> 8); //返回值 -4
- 1
図に示すように、式を使用してデモンストレーションします。符号ビット値が1の場合、有効ビットの左側の空のビットはすべて1で埋められます。
- ">>>"演算子
">>>"演算子は、5シンボルの右シフト操作を実行します。符号なし32ビット整数のすべての桁を全体として右にシフトします。符号なしまたは正の右シフト演算の場合、符号なし右シフト演算と符号付き右シフト演算の結果は同じです。
次の2行の式の戻り値は同じです。
console.log(1000 >> 8); //返回值3
console.log(1000 >>> 8); //返回值3
- 1
- 2
負の数の場合、符号なしの右シフトは0を使用してすべての空席を埋めると同時に、負の数は正の数として扱われ、結果は非常に大きくなります。したがって、符号なしを使用する場合は注意が必要です。偶発的なエラーを回避するための右シフト演算子。
console.log(-1000 >> 8); //返回值 -4
console.log(-1000 >>> 8); //返回值 16777212
- 1
- 2
図に示すように、式を使用してデモンストレーションします。左側のスペースは、符号ビットの値で埋められなくなりましたが、0で埋められています。