PHP位操作符

2021-09-06 12:27:00 字數 1854 閱讀 1502

這個涉及到系統底層,web開發中幾乎沒用到,知道下有這個東西就好了。底層的東西解釋總是簡單不了的。

變數在記憶體中的存放都是二進位制數字。整數在32位系統上是占用4位元組,乙個位元組是8位,也就是32位,位運算就是位級的運算操作了。

$a << $b shift left(左移) 將 $a 中的位向左移動 $b 次(每一次移動都表示「乘以 2」)。

假定變數 

$a  的值是  3,$b  的值是  2。

那麼  $a  在記憶體中的存放的格式是:

00000000 00000000 00000000 00000011

每執行一次左移,都將所有的位向左移動,右邊補零,左邊超過的捨棄。

所以  $a  左移  2  得到的是:

00000000 00000000 00000000 00001100

也就是  12。相當於  3 × 2 × 2 = 12。

$a >> $b shift right(右移) 將 $a 中的位向右移動 $b 次(每一次移動都表示「除以 2」)。

假定變數  $a  的值是  24,$b  的值是  2。

那麼  $a  在記憶體中的存放的格式是:

00000000 00000000 00000000 00011000

每執行一次右移,都將所有的位向由移動,右邊超過的捨棄,左邊空出的位補零。

所以  $a  右移  2  得到的是:

00000000 00000000 00000000 00000110

也就是  6。相當於  24 ÷ 2 ÷ 2 = 6。

位移運算是系統底層運算,運算的速度比乘除還要快很多,優化**優化到極致的時候,可以將數換算成二的公倍數,然後進行位移計算。但在web開發中幾乎沒有任何必要,而且超過系統底層了,程式在的可移植性就會降低。

其他的位運算子也是差不多的。比如:

$a & $b and(按位與) 將把 $a 和 $b 中都為 1 的位設為 1。

假定變數  $a  的值是  5,$b  的值是  6。

$a:00000000 00000000 00000000 00000101

$b:00000000 00000000 00000000 00000110

$a  &  $b  :

00000000 00000000 00000000 00000101

00000000 00000000 00000000 00000110

───────────────────────────

00000000 00000000 00000000 00000100

豎的看,上下都是  1  的得到  1  ,否則就是  0。

所以  $a  &  $b  =  4。

~ $a not(按位非) 將 $a 中為 0 的位設為 1,反之亦然。

~ $a:

00000000 00000000 00000000 00000101

───────────────────────────

11111111 11111111 11111111 11111010

如果  $a  是有符號整數,第一位是符號位,1表示負數,那麼  ~ $a = -2147483642。

如果  $a  是無符號整數,第一位還是資料位,那麼  ~ $a = 4294967290。

以下的就不詳細介紹了:

$a | $b or(按位或) 將把 $a 或者 $b 中為 1 的位設為 1。

$a ^ $b xor(按位異或) 將把 $a 和 $b 中不同的位設為 1。

平常說的幾位的系統,就是系統處理整數的時候,是多少個位同時計算的,上面的例子都是基於32位系統。因為移動時超過的位將被捨棄,如果是64位或12位的,位移的結果就可能不一樣了,要將計算時位的數量調整下。

PHP位操作符

這個涉及到系統底層,web開發中幾乎沒用到,知道下有這個東西就好了。底層的東西解釋總是簡單不了的。變數在記憶體中的存放都是二進位制數字。整數在32位系統上是占用4位元組,乙個位元組是8位,也就是32位,位運算就是位級的運算操作了。a b shift left 左移 將 a 中的位向左移動 b 次 每...

c語言操作符 位操作符 移位操作符

1 按位操作符 1.1 按位 與 雙目運算子 僅當兩個運算元都為1時,結果為1,否則為0。參與運算的數以補碼方式出現。例 9 5 1 0000 1001 9的補碼 0000 0101 5的補碼 0000 0001 1的補碼 應用 a 通常將某些位清零或保留某些位。例如 將a的高八位清零,保留低八位,...

位運算操作符

與運算,二元操作符,對兩個操作員的每個二進位制位進行與運算,運算規則為 1 1 1 1 0 0 0 1 0 0 0 0 異或運算,二元操作符,對兩個操作員的每個二進位制位進行異或運算,運算規則為 1 1 0 1 0 1 0 1 1 0 0 0 或運算,二元操作符,對兩個操作員的每個二進位制位或運算,...