二进制位运算

  1. 二进制的最高位是符号位,php中的数都是有符号的,正数是0负数是1;整数都是4个字节,1个字节有8位
  2. 正数的原码、反码、补码都一样,0的反码、补码都是0
  3. 负数的反码:符号位不变,其它位全部取反
  4. 负数的补码:负数的反码+1
  5. 在计算机运算的时候,都是以补码的方式来运算的

题目1:    ~2=?

2的原码:00000000 00000000 00000000 00000010   正数的原码、补码、反码一样

~$a ,按位取反 ,将 $a 中为 0 的位设为 1,反之亦然。

解题思路:1.首先找出2的补码

2.全部取反后的补码:11111111 11111111 11111111 11111101

3.取反后的反码:11111111 11111111 11111111 11111100

4.取反后的原码:10000000 00000000 00000000 00000011

5.计算后的数字结果:-3

题目2:      2&3 =?

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

解题:

1.2的补码:00000000 00000000 00000000 00000010

   3的补码:00000000 00000000 00000000 00000011

2.都为1的设置为1之后补码为 : 00000000 00000000 00000000 00000010

3.反码为不变

4.原码为不变

5.计算数值为:2

题目3: -3>>2 = ?

向任何方向移出去的位都被丢弃。左移时右侧以零填充,符号位被移走意味着正负号不被保留。右移时左侧以符号位填充,意味着正负号被保留。

解题:

-3的原码: 10000000 00000000 00000000 00000011

-3的反码: 11111111 11111111 11111111 11111100

-3的补码: 11111111 11111111 11111111 11111101

补码右移两位后的补码:11111111 11111111 11111111 11111111

补码->反码:11111111 11111111 11111111 1111110

反码->原码:10000000 00000000 00000000 00000001

数值结果:-1

~ $aNot(按位取反)将 $a 中为 0 的位设为 1,反之亦然。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值