导航:首页 > 编程语言 > 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