JAVA >> 与 >>>

右移(>>)与无符号右移(>>>)

有符号类型和无符号类型

在java中的数值类型都是有符号的,并不像C语言一样存在无符号类型。以int类型为例,int类型的长度为4个字节32位,其首位作为符号位0表示正数,1表示负数。因此-9与9在计算机中的表现形式如下图所示。
在这里插入图片描述

原码、反码、补码

在计算机中,所有对数值的运算的是基于补码进行的,这点特别重要,如果没搞清楚这一点经常会对计算结果感到奇怪。就比如-1>>>1与-2>>>1的结果为什么是相同的,而且都是2147483647(Integer.MAX_VALUE)。以-9为例其原码、反码、补码如下图所示。
在这里插入图片描述

>>与>>>的计算逻辑

(>>)与(>>>)都是对补码进行计算的,他们俩的区别在于>>在补齐高位时使用符号位进行补齐;而>>>补齐高位时恒使用0补齐。

  • 以-9为例进行>>2计算,其计算逻辑如下图所示,-9>>2=-3
    在这里插入图片描述
  • 以-9为例进行>>>2计算,其计算逻辑如下图所示,-9>>>2=1073741821
    在这里插入图片描述

为什么 -1>>>1 = -2>>>1 = Integer.MAX_VALUE = 2147483647?

基于上面的逻辑和步骤,我们计算-1>>>1和-2>>>1时发现,其结果是相等的且都等于Integer.MAX_VALUE,读着可以自己尝试验证一下。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值