位运算

首先区分下每一种代表的意思

a << b  代表将数字a的二进制向左位移b位

a >> b  代表将数字a的二进制带符号向右位移b位

a >>> b 代表将数字a的二进制不带符号向右位移b位

一、a << b

规则:a的二进制整体向左移动b位,在低位补零

相当于a乘上2的b次方,正负数都可以这样算

例子

4<<2

计算方式:

首先得到4的二进制

0000 0100

移动后:

0001 0000

结果:16


二、a >> b

规则:a的二进制整体向右移动b位,右边超出部分直接抛弃,左边高位用原符号位补齐

例子(负数)

-5>>2

计算方式:

-5的源码

1000 0000 0000 0000 0000 0000 0000 0101

由于是负数则取反,然后再转换成补码计算

反码:1111 1111 1111 1111 1111 1111 1111 1010    

补码:1111 1111 1111 1111 1111 1111 1111 1011 

右移后:1111 1111 1111 1111 1111 1111 1111 1110

再通过取补码的反码加补码得出结果

反码 :1000 0000 0000 0000 0000 0000 0000 0001    

补码: 1000 0000 0000 0000 0000 0000 0000 0010    

结果-2

因为取了两次反所以完全可以用 0000 0101来计算

例子(正数)

5>>2

计算方式:

5的二进制

0000 0101

直接向右移动2位

0000 0001

结果1


三、a>>>b 

将数字a的二进制不带符号向右位移b位 高位不管是正负都直接补0 

其实右移n位,就相当于除于2的n次方,如果是负数就用负数的补码的10进制除于2的N次方

例子

-5>>>2

-5的二进制源码

1000 0000 0000 0000 0000 0000 0000 0101

由于是负数则取反,然后再转换成补码计算

反码:1111 1111 1111 1111 1111 1111 1111 1010    

补码:1111 1111 1111 1111 1111 1111 1111 1011    

右移后:0011 1111 1111 1111 1111 1111 0011 1110

1073741822再通过取补码的反码加补码得出结果

反码 :0100 0000 0000 0000 0000 0000 0100 0001    

补码: 0100 0000 0000 0000 0000 0000 0100 0010    结果1073741822

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值