陈力:传智播客古代 珍宝币 泡泡龙游戏开发第27讲:PHP位运算

陈力:传智播客古代 珍宝币 泡泡龙游戏开发第27讲:PHP位运算

  PHP程序设计语言中有哪些位运算,二进制的原码、反码、补码等怎么表示。按位与&、按位或|、按位异或^、按位取反~,算术左移、算术右移等都是贵阳网站建设中必须掌握的内容。本节为陈力:传智播客古代 珍宝币 泡泡龙游戏开发第27讲:PHP位运算

一、二进制
    二进制(Binary)是逢2进位的进位制,0、1是基本算符。所谓二进制就是逢二进一(0,1),因为使用二进制只有0、1两个数,简单,易于电子方式实现,同时,通过0、1 组合可以表示任意一个数。
现代的电子计算机技术全部采用的是二进制,因为它只使用0、1两个数字符号,非常简单方便,易于用电子方式实现。计算机内部处理的信息,都是采用二进制数来表示的。二进制(Binary)数用0和1两个数字及其组合来表示任何数。进位规则是“逢2进1”,数字1在不同的位上代表不同的值,按从右至左的次序,这个值以二倍递增。 
网上对原码、反码、补码的解释过于复杂,本文在贵阳网站建设中总结出以下精简的几句话:
   对于有符号的而言:
   ①二进制的最高位是符号位: 0表示正数,1表示负数。
   ②正数的原码、反码、补码都一样。
   ③负数的反码=它的原码符号位不变,其它位取反(0->1,1->0)。
   ④负数的补码=它的反码+1。
   ⑤0的反码、补码都是0。
   ⑥php没有无符号数,换言之,php中的数都是有符号的。
   ⑦在计算机运算的时候,都是以补码的方式来运算的。
有关二进制的三个重要的概念:
(1)原码:用二进制来表示一个数,这个码就是原码。
数字5的原码表示为  00000000 0000000 0000000 00000101 = 1*2的零次方+0*2的一次方+1* 2的二次方=1+0+4=5
(2)反码:负数的反码=它的原码符号位不变,其它位取反(0变成1,1变成0)
-1的原码 10000000 00000000  00000000 00000001
-1的反码 11111111 11111111  11111111 11111110
-1 的补码 11111111 11111111 111111111 11111111
(3)补码:在计算机运算的时候,都是以补码的方式来运算的。不管一个数是正数还是负数,都要被转成补码,然后进行运算。

二、位运算

 位运算一览表 
软件设计,PHP位运算,贵阳网站建设

在上图中,前面四个是位运算。
其运算规则是:
按位与&:两位全为1,结果为1。全1出1。
按位或|:  两位中有一个为1,结果为1。有1出1。
按位异或^ :两位一个为0,一个为1,结果为1。01出1,11出0,00出0。
按位取反~: 0变1 ,1变0。0出1,1出0。
例:~2=?
步骤1 :首先要求出 2的补码
2是正数:原码=反码=补码
2的原码:00000000 00000000 00000000 00000010
步骤2:按位取反:
11111111 11111111 11111111 11111101。通过补码也可以推出原码。
补码也可以推出原码:由于负数的原码-》反码-》补码,所以进行反推时,
11111111 11111111 11111111 11111101->
推出其反码 :将补码-1
11111111 11111111 11111111 11111100
推出原码:符号位不变,再按位取反。
10000000 00000000 00000000 0000011 -> -3
所以结果为-3。
例:~-5=?
-5 的 补码先求出来:
-5 原码  10000000 00000000 00000000 00000101
-5 反码  11111111 11111111 11111111 11111010
-5 补码  11111111 11111111 11111111 11111011
~-5取反 00000000 00000000 00000000 00000100 (这结果也是补码形式,要转成原码形式再输出。因为符号位为正数,所以原码、反码和补码都是一样的。)

例:2&3=? 
 2&3 首先要找到 2 和 3的补码
2 的补码  00000000 00000000 00000000 00000010
3 的补码  00000000 00000000 00000000 00000011
2&3       00000000 00000000 00000000 00000010 [结果也是补码形式,因是正数无需再转换]

例:2|3=?
    2 的补码  00000000 00000000 00000000 00000010
    3 的补码  00000000 00000000 00000000 00000011
  2|3       00000000 00000000 00000000 00000011

例:2^3
    2 的补码 00000000 00000000 00000000 00000010
    3 的补码  00000000 00000000 00000000 00000011
    2^3      00000000 00000000 00000000 00000001
    可以手动计算:13&7=?   5|4=?   -3^3=?

三、位移运算
    在php程序设计语言中,位运算有两种 >> (右移) <<(左移)。
    运算的规则是:
    算术右移:低位溢出,符号位不变,并用符号位补溢出的高位。
    算术左移:符号位不变,低位补0。
    根据前面的规范,来完成几个案例:
$a=1>>2; 
先求出1的补码:
00000000 00000000 00000000 00000001
1>>2
00000000 00000000 00000000 00000000
例:$b=-1>>2;
  步骤 -1 的补码:
  -1 的原码 10000000 00000000 00000000 00000001
       -1 的反码 11111111 11111111 11111111 11111110
       -1 的补码 11111111 11111111 11111111 11111111
      -1 >> 2
        11111111 11111111 11111111 11111111 (补码形式的,要转换成原码)
     补码->原码:
        反码 11111111 11111111 11111111 11111110
        原码 10000000 0000000 00000000 00000001
     结果为-1。
例:$c=1<<2; 
    先求出1的补码:
00000000 00000000 00000000 00000001
00000000 00000000 00000000 00000100
  结果为4。

【推荐阅读】陈力:传智播客古代 珍宝币 泡泡龙游戏开发第27讲:PHP位运算


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值