最新消息:

php中的位运算

PHP xiaofeiyouhuashuo 106浏览 0评论

所谓的位运算其实就是直接对整数在内存中的二进制位进行操作。一共有这几种位运算:&(与)、|(或)、~(非)、^(异或)、<<(左移)、>>(右移)。

1、首先说说 &(与)

1&1结果为1;

1&0结果为0;

0&1结果为0;

0&0结果为0;

我们将十进制数进行位运算,其实在内存中也是先将它们转换成二进制运算,最后结果再转换为十进制。

例如 :$v = 8&3;

内存中是 1000&11,我们以8位为例,也就是00001000&00000011,结果为00000000,转换为十进制也就是0。

2、再说说|(或)

1|1结果为1;

1|0结果为1;

0|1结果为1;

0|0结果为0;

3、~(非)

非就很好理解了,就相当于取反。0变1,1变0;

4、^(异或)

1^1结果为0;

1^0结果为1;

0^1结果为1;

0^0结果为0;

5、<<(左移)(以下例子均以8位为例,实际过程中一般是32位或者64位)

形式: A << n;//A是一个要被移动的数字,同样可以是普通数字,但按二进制去运算,n是一个指定要移动的位数

含义:将数字A的二进制形式的每一个位上的数字往左边移动指定的位数n,则最左边的n位移出去了就不管了,最右边空出来的n位,补0就可以。

举例:$r1 = 9 << 2;//9的二进制形式为:1001

php中的位运算

结果为:32+4=36

6、>>(右移)

形式: A >> n;//A是一个要被移动的数字,同样可以是普通数字,但按二进制去运算,n是一个指定要移动的位数

含义:将数字A的二进制形式的每一个位上的数字往右边移动指定的位数n,则最右边的n位移出去了就不管了,最左边空出来的n位,补0就可以(对正数,实际是补符号位)。

php中的位运算

结果为:2;

原码,反码,补码介绍

原码:就是“原来的二进制码”,其实就是我们可以理解的按10进制转换为二进制之后得到的一个字符码。

原码在数学上都是可以理解的。

但在实际的计算机的运行过程中,却常常不用原码,一般都是采用补码。正数的反码补码都是原码,负数则要进行转换了。

规则:一个二进制数字的第一个位是符号位,0表示正数,1表示负数。

举例:

原码:

5 : 00000101

-5 : 10000101

反码:

5:00000101(正数的反码是其原码)

-5:11111010(负数的反码:将原码的非符号位都取反)

补码:

5:00000101(正数的补码也是其原码)

-5:11111011(负数的补码是其反码加1)

在整数 运算中都是将整数转换为二进制补码进行相加,结果再转换为原码。

php中的位运算

总结:

1,数据在cpu内部都是按补码进行运算。

2,原码,反码,补码的转换过程是系统内部的工作,且转换时符号位不变;

3,用补码运算时,符号位参与运算(即当作一个普通的二进制位的数字进行运算)

转载请注明:PHP学习 » php中的位运算

发表我的评论
取消评论

表情

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址