java位运算左移<<、右移>>、无符号右移>>>

<<(左移),>>(右移)皆属于位运算符,运算比乘除快

<<(左移)

带符号位移,高位移出,低位补0,移动位数超过该类型的最大位数,则进行取模,如对Integer型左移34位,实际上只移动了两位。左移一位相当于乘以2的一次方,左移n位相当于乘以2的n次方。

例子1:

1<< 4
1的二进制表示:0000 0001
1进行左移四位表示:0001 0000=2的4次方*1=16
所以1<< 4的值是16

例子2:

1<< 34
int型最大是32位,移动34位,34/32=1…2
所以是向左移动2位,即1<< 4的值是4

运行结果:

在这里插入图片描述

>>(右移)

右移代表除, 左移n位相当于乘以2的n次方;

例子1:

64>>>3
64的二进制表示:0100 0000
64进行右移3位表示:0000 1000 =2的3次方*1=8

运行结果:

在这里插入图片描述

无符号右移>>>(正数左补0负数左补1)

1) 通用格式
  value >>> num
  num 指定要移位值value 移动的位数。
2) 运算规则
  无符号右移的规则只记住一点:忽略了符号位扩展,0补最高位
  无符号右移运算符>>> 只是对32位和64位的值有意义

为什么没有无符号左移?

因为左移是在后面补0
而右移是在前面边补1或0
有无符号是取决于数的前面的第一位是0还是1
所以右移是会产生到底补1还是0的问题。
而左移始终是在右边补,不会产生符号问题。
所以没有必要无符号左移<<<。
无符号左移<<<和左移<<是一样的概念

  • 2
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值