導航:首頁 > 編程語言 > php位異或運算

php位異或運算

發布時間:2025-09-01 04:17:30

php代碼中的意思

^是「異或」操作,這是一種位運算符,運算時,先要將操作數轉換成二進制,如12的二進制是:00001100,9的二進制是00001001,然後每一位獨立進行異或運算,異或運算的法則是:
0 ^ 0 = 0
0 ^ 1 = 1
1 ^ 0 = 1
1 ^ 1 = 1
可總結為相同數異或為0,不同數異或為1。所以12^9就是00001100^00001001=00000101(提示:每一位是分別做異或的,互不影響),即十進制的5。

㈡ 在PHP中【邏輯運算符】和【位運算符】有什麼本質的區別

這個很難細說,不過和C語言中的邏輯運算符和位運算符是一樣區別的
下面給個參考(摘至某人博客):

一、邏輯運算符:

包括:1。&&邏輯與 2。||邏輯或 3。!邏輯非

邏輯運算符用於對包含關系運算符的表達式進行合並或取非

對於使用邏輯運算符的表達式,返回0表示「假」,返回1表示「真」。關於邏輯運算符的解釋

請注意:任何使用兩個字元做符號的運算符,兩字元之間不應有空格,即將==寫成= =是錯誤的。

假設一個程序在同時滿足條件a<10和b==7時,必須執行某些操作。應使用關系運算符和邏輯運算符「與」來寫這個

條件的代碼。用&&表示「與」運算符,該條件代碼如下:

(a<10) && (b==7);

類似地,「或」是用於檢查兩個條件中是否有一個為真的運算符。它由兩個連續的管道符號(||)表示。如果上例

改為:如果任一語句為真,則程序需執行某些操作,則條件代碼如下:

(a<10) || (b==7);

第三個邏輯運算符「非」用一個感嘆號(!)表示。這個運算符對表達式的真值取反。例如,如果變數s小於10,程序

程序需執行某些操作,則條件代碼如下:

(s<10)



(!(s>=10)) //s不大於等於10

關系運算符和邏輯運算符的優先順序一般都低於算術運算符。例如,5>4+3的計算與5>(4+3)運算符是一樣的,即

先計算4+3,再執行關系運算。此表達示的結果為「假」,即,將返回0。

下面的語句

printf("%d",5>4+3);

將輸出 0

可以總結為:&&的結果是真真為真。||的結果是假假為假。

二、位運算符:

包括:1。&位與符 2。|位或符 3。^位異或符 4。~位取反符

以操作數12為例。位運算符將數字12視為1100。位運算符將操作數視為位而不是數值。數值

可以是任意進制的:十進制、八進制或十六進制。位運算符則將操作數轉化為二進制,並相應地返回1或0。

位運算符將數字視為二進制值,並按位進行相應運算,運算完成後再重新轉換為數字。例如:

表達式10&15表示(1010 & 1111),它將返回表示1010的值10。因為真真得真,或者是11得1,同位全是1結果也是1

表達式10|15表示(1010 | 1111),它將返回表示1111的值15。假假得假。全零得零。

表達式10^15表示(1010 ^ 1111), 它將返回表示0101的值5。此時是同性相斥,相同的就為假。

表達式~10表示(~1010),它將返回表示0101的值 -11。此號好理解,按位取反

㈢ 關於php 位運算符的問題

這個涉及到系統底層,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 00011000
也就是 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位異或運算相關的資料

熱點內容
php下載統計代碼 瀏覽:315
找別人寫程序包括源碼嗎 瀏覽:803
python讀取標准輸入 瀏覽:875
python怎麼調用knn 瀏覽:807
excel怎麼保存pdf 瀏覽:68
模擬退火演算法matlab代碼 瀏覽:115
演算法工程師年齡大了以後怎麼辦 瀏覽:263
人教版高中化學pdf 瀏覽:706
pic單片機網口編程 瀏覽:25
大學必須學python嗎 瀏覽:872
養什麼植物解壓 瀏覽:466
華為雲伺服器怎麼裝 瀏覽:483
ensp查看配置好的命令 瀏覽:87
短視頻推薦系統python 瀏覽:805
加密超級大師怎麼恢復文件 瀏覽:274
瀏覽器下載圖片解壓失敗 瀏覽:197
android搶單 瀏覽:22
電信用聯通游戲伺服器地址 瀏覽:75
安卓缺什麼軟體 瀏覽:221
安卓app如何植入群號 瀏覽:765