PHP

php中的二进制、运算符和位移运算符

智言 2014年08月27日 阅读(10788) 0

二进制是所有电子产品都在使用的,而且除了二进制相信大家还听到过八进制、十进制、十六进制之类的,而他们都是由二进制演算而来的。

那么什么是二进制呢?

它的基本概念是:二进制就是逢二进一,因为使用二进制只有0,1两个数,简单,易于电子方式实现,同时,通过0,1的组合可以表示任意一个数。

所以像大家在电脑上看到的只有0和1的数字,就表示的是二进制了。

那么要知道这些数字在php中是怎么运算的,我们就需要学到一些关于原码、反码、补码的知识了。

首先给大家介绍一下关于原码、反码、补码的几个要点,当然,这些智言也是从老师那学来的,这里只是做一个分享罢了。

  1. 二进制的最高位是符号位:0表示整数,1表示负数;
  2. 正数的原码、反码、补码都一样;
  3. 负数的反码等于它的原码符号位不变,其他位取反(0变成1,1变成0);
  4. 负数的补码等于它的反码+1;
  5. 0的反码,补码都是0;
  6. php没有无符号数,换言之,php汇总的数都是有符号的;
  7. 在计算机运算的时候,都是以补码的方式来运算的。

什么意思呢?比如:

数字 的二进制原码为:00000000  00000000  00000000  00000010

数字 的二进制反码为:00000000  00000000  00000000  00000010

数字 的二进制补码为:00000000  00000000  00000000  00000010

为什么呢?因为上门的第二点已经说了正数的原码、反码、补码都一样,所以他们的二进制都是一样的,那么接下来举一个负数。

负数 -3 的二进制原码为:10000000  00000000  00000000  00000011

负数 -3 的二进制反码为:11111111  11111111  11111111  11111100

负数 -3 的二进制补码为:11111111  11111111  11111111  11111101

 

通过上面的举例大家是否就已经很清楚的认识了二进制的相关知识和它的原码、反码、补码了呢?

当然,知道这些还是不够的,接下来我们就运用运算符来进行运算一些简单的处理。

运算符

而运算符在php中包含以下几种:

  1. 按位与&:两位全为1,结果为1
  2. 按位或|:两位有一个为1,结果为1
  3. 按位异或^:两位一个为0,一个为1,结果为1
  4. 按位取反~:0变成1,1变成0

例如:请计算 2&3的值

要计算2&3的值,那么就需要先将2的补码和3的补码算出来,然后进行比较再按照第一条来进行处理即可,如下:

首先由于2是正数,它的补码和原码是一样的,所以得到00000000  00000000  00000000  00000010

而由于3也是正数,它的补码和原码也一样的,所以得到00000000  00000000  00000000  00000011

00000000  00000000  00000000  00000010

00000000  00000000  00000000  00000011

最后按照第一条要点(两位全为1,结果为1),那么得到下面的综合补码:

00000000  00000000  00000000  00000010

而上面的是综合的补码,而要我们认识就必须要把补码再转换成原码才行,而要转换成原码,又必须先转换成反码,而由于第一位符号数为0,所以是正数,而正数的补码、反码、原码都是一样的,所以得到最后的原码为:

00000000  00000000  00000000  00000010

 

而现实的结果也就是:2

当然,大家可以在php的程序里测试一下,我自己测试是没有问题的。

位移运算符

对于位移运算符只有两个,如下

  1. >>:算术右移,低位溢出,符号位不变,并用符号位补溢出的高位
  2. <<:算术左移,符号位不变,低位补0

举例说明:请计算   2<<3

同样,先算出2的补码为:00000000  00000000  00000000  00000010

然后根据上面的第二点,算术左移,符号位不变,低位补0,得到如下结果:

00000000  00000000  00000000  00010000

红色表示的是低位补的三个0

最后显示结果:16

 

大家有兴趣的都可以去练练,不知道智言今天分享的这些大家是否能用的上呢?让我们一起加油吧。

 

 

 

智言

业务开发请联系QQ:5679361

评论 抢沙发

评论前必须登录!

 


如果你觉得本站内容对你有所帮助,比如提升你对编程方面的认识,你可以通过上面的二维码请博主喝杯咖啡,安好。

WEB前端开发部落(公众号:webapp_club)

群列表

前端初级学习群:初级Web前端学习群(后期为支付入群)
PHP初级学习群:PHP(MySQL)学习交流群
QQ群仅作为相关领域讨论平台,均提供高质量问题交流,禁止闲聊,无法接受的朋友请勿加群!
进群需要通过这里获取进群码才能进群哦!

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏