今天给大家详细介绍一下PHP运算符中的“位运算符”

 

位运算符在PHP中不经常用到,但是他的用处还是很大,下面的内容我们会举例说明一下位运算符的用法。

位运算符是指对二进制位从低位到高位对齐后进行运算,它允许对整型数中指定的位进行求值和操作。

在PHP中的为运算符如下表所示

运算符

说明

例子

&

按位与

$m & $n

|

按位或

$m | &$n

^

按位异或

$m ^ $n

~

按位非或按位取反

$m ~ $n

<<

左移

$m << $n

>>

右移

$m >> $n

下面我们用例子来上面一下上表中的运算符


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15




​<?php​

 

​$m​​​​=1;                ​​​​//1=0 00000001​

​$n​​​​=2;                 ​​​​//2=00000010​

 

​$mn​​​​=​​​​$m​​​​&​​​​$n​​​​;​

​echo​​ ​​$mn​​​​.​​​​"<br/>"​​​​;​

 

​$mn​​​​=​​​​$m​​​​^​​​​$n​​​​;​

​echo​​ ​​$mn​​​​.​​​​"<br/>"​​​​;​

 

​$mn​​​​=​​​​$m​​​​|​​​​$n​​​​;​

​echo​​ ​​$mn​​​​;​

 

​?>​


 

 

例子解释:

$m&$n : 二者都为 1 时为 1 ,否则为 0。即把 $a 和 $b 中都为 1 的位设为 1 ,否则设为 0 。

00000001 ← $m

& 00000010 ← $b

比较结果为00000000,所以输出0


$m^$n :在按位亦或的过程中,不同为1,相同为0。

00000001 ← $m

^ 00000010 ← $n

所以结果为00000011,进而输出3。


$m|$n: 在按位或的过程中,有1为1,全0为0,

00000001 ← $m

| 00000010 ← $n

则结果为00000011,所以输出3

上面的例子讲了“按位或”,“按位或”,“按位异或”,下面我们再来看一下后面的三种示例


按位非或按位取反示例,代码如下


1

2

3

4

5




​<?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

 


左移右移代码示例


1

2

3

4

5

6

7

8

9

10




​<?php​

​$m​​ ​​= 12;     ​​​​// 12=00001100​

​$n​​ ​​= 3;     ​​​​// 3=00000011​

 

​$mn​​​​= ​​​​$m​​ ​​<< ​​​​$n​​​​;​

​echo​​ ​​$mn​​ ​​.​​​​"<br/>"​​​​;​

 

​$mn​​​​= ​​​​$m​​ ​​>> ​​​​$n​​​​;​

​echo​​ ​​$mn​​ ​​; ​

​?>​


 

 

示例解释:


$m<<$n:将 $m 中的位向左移动 $n 次(每一次移动都表示“乘以 2”,即“乘以 2$b ”)。

0000 1100 ← $m

<< 0110 0000 左移3个,空出的位置用 0 补充


0110 0000 = 96



$m>>$n:将 $m中的位向右移动 $n 次(每一次移动都表示“除以 2”,即“乘以 2 -$b ”)。

0000 1100 ← $m

<< 0000 0001 右移3个,多出的位置截掉


0000 0001 = 1

 

上面的内容就是PHP运算中的“位运算符”的详细内容,