欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  神坛PHP

PHP位运算符

程序员文章站 2022-02-02 09:47:23
...


符号 作用 举例 个人理解

& 按位与 $m & $n 全1为1,否则为0

| 按位或 $m | $n 全0为0,有1为1

^ 按位异或 $m | $n 不同为1,相同为0

~ 按位取反 ~$m

<< 向左移位 $m << $n

>> 向右移位 $m >> $n


例如:

&运算符

<?php

$m = 1;

$n = 2;

$mn = $m & $n;

echo $mn;

运行结果为0

解释:将1,2分别转换为二进制为

00000001

00000010

在按位与的过程中,按位比较,全1为1,比较结果为00000000,所以输出0


|运算符

<?php

$m = 1;

$n = 2;

$mn = $m | $n;

echo $mn;

运行结果为3,同样,转换成如上的二进制

00000001

00000010

在按位或的过程中,有1为1,全0为0,则结果为00000011,所以输出3



|运算符

<?php

$m = 1;

$n = 2;

$mn = $m | $n;

echo $mn;

运行结果为3,同样,转换成如上的二进制

00000001

00000010

在按位或的过程中,有1为1,全0为0,则结果为00000011,所以输出3


^运算符

<?php

$m = 1;

$n = 2;

$mn = $m ^ $n;

echo $mn;

运行结果为3,同样,转换成如上的二进制

00000001

00000010

在按位亦或的过程中,不同为1,相同为0,所以结果为00000011,进而输出3。


~运算符

<?php

$m = 2;

$m1 = ~$m;

echo $m1;

运行结果为-3,此处引人深思。

注:在计算机中,负数以其正值的补码形式表达。

1: 2的32位原码为 0000 0000 0000 0000 0000 0000 0000 0010

2: 按位取反后为 1111 1111 1111 1111 1111 1111 1111 1101

由于最前面的数为1,符号位为1,即为负数,所以,以其正值的补码形式表示为:(符号位不变,按位取反,末尾加1)

1000 0000 0000 0000 0000 0000 0000 0011

所以输出为-3



<<运算符

<?php

$m = 3;

$m1=$m << 1;

echo $m1;

运算结果为6

左移运算的实质是将对应的数据的二进制值逐位左移若干位,并在空出的位置上填0,最高位溢出并舍弃。

3的32位原码为,0000 0000 0000 0000 0000 0000 0000 0011

左移一位:0000 0000 0000 0000 0000 0000 0000 0110

所以为6

根据手册描述可以看出位运算可以看出向左移一位,则是实现乘2运算。由于位移操作的运算速度比乘法的 运算速度高很多。因此在处理数据的乘法运算的时,采用位移运算可以获得较快的速度。

提示 将所有对2的乘法运算转换为位移运算,可提高程序的运行效率。


>>运算符

右移一位,和<<运算符,类似,只不过这个是右移,此处不在做过多解释。


相关标签: 运算符