二进制是所有电子产品都在使用的,而且除了二进制相信大家还听到过八进制、十进制、十六进制之类的,而他们都是由二进制演算而来的。
那么什么是二进制呢?
它的基本概念是:二进制就是逢二进一,因为使用二进制只有0,1两个数,简单,易于电子方式实现,同时,通过0,1的组合可以表示任意一个数。
所以像大家在电脑上看到的只有0和1的数字,就表示的是二进制了。
那么要知道这些数字在php中是怎么运算的,我们就需要学到一些关于原码、反码、补码的知识了。
首先给大家介绍一下关于原码、反码、补码的几个要点,当然,这些智言也是从老师那学来的,这里只是做一个分享罢了。
- 二进制的最高位是符号位:0表示整数,1表示负数;
- 正数的原码、反码、补码都一样;
- 负数的反码等于它的原码符号位不变,其他位取反(0变成1,1变成0);
- 负数的补码等于它的反码+1;
- 0的反码,补码都是0;
- php没有无符号数,换言之,php汇总的数都是有符号的;
- 在计算机运算的时候,都是以补码的方式来运算的。
什么意思呢?比如:
数字 2 的二进制原码为:00000000 00000000 00000000 00000010
数字 2 的二进制反码为:00000000 00000000 00000000 00000010
数字 2 的二进制补码为:00000000 00000000 00000000 00000010
为什么呢?因为上门的第二点已经说了正数的原码、反码、补码都一样,所以他们的二进制都是一样的,那么接下来举一个负数。
负数 -3 的二进制原码为:10000000 00000000 00000000 00000011
负数 -3 的二进制反码为:11111111 11111111 11111111 11111100
负数 -3 的二进制补码为:11111111 11111111 11111111 11111101
通过上面的举例大家是否就已经很清楚的认识了二进制的相关知识和它的原码、反码、补码了呢?
当然,知道这些还是不够的,接下来我们就运用运算符来进行运算一些简单的处理。
运算符
而运算符在php中包含以下几种:
- 按位与&:两位全为1,结果为1
- 按位或|:两位有一个为1,结果为1
- 按位异或^:两位一个为0,一个为1,结果为1
- 按位取反~: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的程序里测试一下,我自己测试是没有问题的。
位移运算符
对于位移运算符只有两个,如下
- >>:算术右移,低位溢出,符号位不变,并用符号位补溢出的高位
- <<:算术左移,符号位不变,低位补0
举例说明:请计算 2<<3
同样,先算出2的补码为:00000000 00000000 00000000 00000010
然后根据上面的第二点,算术左移,符号位不变,低位补0,得到如下结果:
00000000 00000000 00000000 00010000
红色表示的是低位补的三个0
最后显示结果:16
大家有兴趣的都可以去练练,不知道智言今天分享的这些大家是否能用的上呢?让我们一起加油吧。
评论前必须登录!
注册