位运算规则

位运算需要将源码转换成补码再运算,运算结束后再转成源码,才是结果

源码和补码转换规则:

  • 正数 

源码转补码:结果是正数本身

补码转源码:结果是正数本身

  • 负数

源码转补码:符号位不变,其它位取反,然后加一

补码转源码:符号位不变,其它位取反,然后加一

---------------------

举例:

正数 2

源码 0000 0010 

补码 0000 0010 

===========

2 位非运算 ~2

转成补码运算

补码 0000 0010

运算:1111 1101 (每个位置数值都取反)

转成源码:因为结果是负数,符号位不变,其它位取反

1000 0010 加一 1000 0011

所以 ~2 = -3

===========

-3 的位非运算 ~-3

源码 1000 0011

转成补码:符号位不变,其它位取反 1111 1100 加一 1111 1101

即补码 1111 1101

运算: 0000 0010(每个位置数值都取反)

转成源码:0000 0010

所以 ~-3 = 2 

================

位或运算 2 | -3 

源码 0000 0010 | 1000 0011

补码 0000 0010 | 1111 1101

运算 1111 1111(相同位置数值都为0时取0,否则取1)

转成源码 ->1000 0000 -> 1000 0001

所以 2 | -3 = -1

================

位与运算 2 & -3 

源码 0000 0010 & 1000 0011

补码 0000 0010 & 1111 1101

运算 0000 0000(相同位置数值都为1时取1,否则取0)

转成源码 ->0000 0000 

所以 2 & -3 = 0

===============

位异或运算 2 ^ -3

源码 0000 0010 ^ 1000 0011

补码 0000 0010 ^ 1111 1101

运算 1111 1111(相同位置数值不同取1,否则取0)

转成源码 -> 1000 0000 -> 1000 0001

所以 2 ^ -3 = -1

===============

-15 >> 2

源码 1000 1111 >> 2

补码 1111 0001 >> 2

移动 1111 1100 (负数右移时左边补1)

转成源码 -> 1000 0011 -> 1000 0100 (10进制-4)

所以 -15 >> 2= -4 

其它位运算,规则相同

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值