位运算

来源:互联网 发布:ubuntu装hadoop 编辑:程序博客网 时间:2024/06/03 12:35

1、 位运算一览表

例子                 名称                                                      结果                                                                              



$a & $b

And(按位与)

将把 $a  $b 中都为 1的位设为 1

$a | $b

Or(按位或)

将把 $a  $b 中任何一个为 1的位设为 1

$a ^ $b

Xor(按位异或)

将把 $a  $b 中一个为 1另一个为 0 的位设为 1

~ $a

Not(按位取反)

 $a 中为 0的位设为 1,反之亦然。

$a << $b

Shift left(左移)

 $a 中的位向左移动 $b 次(每一次移动都表示乘以 2”)。

$a >> $b

Shift right(右移)

 $a 中的位向右移动 $b 次(每一次移动都表示除以 2”,若不是整除则则为比值小的最近一个整数,如值为-4.12  结果为-5;如值为4.23  /0.5 结果为4   /0)。


2、位移在 PHP中是数学运算。向任何方向移出去的位都被丢弃。
      左移时右侧以零填充,符号位被移走意味着正负号不被保留,符号位随字符变化而变化。
      右移时左侧以符号位填充,符号位不变。
3、注意:

php没有无符号数,也就是说,php中的数都是有符号的;

计算机中的运算都是以补码的形式参加运算的;

4、php位运算过程如下:(8位计算机为例)

     以2&-7=?计算为例:

1)、计算2的补码:

     2->原码:00000010->反码:00000010->补码:00000010

2)、计算-7的补码:

     -7->原码:10000111->反码:11111000->补码:11111001

3)、计算2&-7的补码->反码->原码

     2&-7补码:00000000->反码:00000000->原码:00000000

4)、有2&-7原码得到2&-7的值

      所以2&-7 = 0

0 0