これはシステムの最下位層に関係するもので、Web 開発ではほとんど使用されません。これが存在することを知っておくとよいでしょう。根底にあるものを説明するのはいつも難しい。
メモリに格納される変数は 2 進数です。整数は 32 ビット システムでは 4 バイトを占め、1 バイトは 8 ビット、つまり 32 ビットの演算です。
$a
仮説変数
この場合、メモリに保存される
00000000 00000000 00000000 00000011
左シフトが実行されるたびに、すべてのビットが左に移動され、右側にゼロが埋め込まれ、左側の余分なビットが破棄されます。
したがって、
00000000 00000000 00000000 00011000
それは
$a >> $b 右シフト $a のビットを右に $b 回シフトします (各移動は「2 による除算」を表します)。
変数
この場合、メモリに保存される
00000000 00000000 00000000 00011000
右シフトが実行されるたびに、すべてのビットが左から右に移動され、右側の余分なビットは破棄され、左側の空いたビットはゼロで埋められます。
したがって、
00000000 00000000 00000000 00000110
それが
変位演算はシステムの基本演算であり、最適化コードを極限まで最適化すると、数値を 2 の公倍数に変換して変位計算を行うことができ、演算速度は乗算や除算よりもはるかに高速になります。実行されました。しかし、WEB開発ではその必要性はほとんどなく、システムの最下層を越えるとプログラムの移植性が低下します。
他のビット演算子も同様です。例:
$a & $b And (ビット単位の AND) は、両方とも 1 である $a と $b のビットを 1 に設定します。
変数
$a:
00000000 00000000 00000000 00000101
$b:
00000000 00000000 00000000 00000110
$a
00000000 00000000 00000000 00000101
00000000 00000000 00000000 00000110
─────────────
00000000 00000000 00000000 00000100
垂直方向に見ると、上下が
つまり
~ $a Not (ビット単位の否定) $a のビットを 0 から 1 に設定し、その逆も同様です。
~$a:
00000000 00000000 00000000 00000101
─────────────
11111111 11111111 11111111 11111010
以下については詳しくは紹介しません:
$a | $b Or (ビット単位の OR) は、$a または $b のビットを 1 に設定します。
$a ^ $b Xor (ビット単位の排他的論理和) は、$a と $b の異なるビットを 1 に設定します。
通常、マルチビット システムとは、システムが整数を処理するときに同時に計算される桁数を指します。上記の例はすべて 32 ビット システムに基づいています。移動時の余分なビットは切り捨てられるため、64ビットや12ビットの場合はディスプレースメントの結果が異なる場合があり、計算時のビット数を調整する必要があります。
から:http://blog.sina.com.cn/s/blog_815611fb01017wtj.html