Java添零右移_为什么Java中的整数为-1零填充右移1 = 2147483647?

The unsigned right shift operator “>>>” shifts a zero into the

leftmost position, while the leftmost position after “>>” depends on

sign extension.

所以,-1以零扩展向右移位一位,这意味着它会将0插入最左边的位置.记住,我们在这里处理two’s complement:

-1为:11111111111111111111111111111111或十六进制0xFFFFFFFF

-1>>> 1是十六进制中的01111111111111111111111111111111或0x7FFFFFFF,它是231 – 1 == 2147483647

你似乎对两个人的补充感到困惑.该值用于31位,并且最左边的位用于符号.由于你只是移位1位,有符号位变为0,这意味着正数,结果是最大的正数,而不是int可以表示.

也许另一个例子会有所帮助.我们来考虑一下:

System.out.println(-2 >> 1); //prints -1

-2 = 1111111111111111111111111111111110

如果我们使用已签名的右移,我们得到:11111111111111111111111111111111,这是-1.但是,如果我们这样做:

System.out.println(-2 >>> 1); //prints 2147483647

由于-2 = 11111111111111111111111111111110并进行无符号右移,这意味着我们以零扩展方式移位1位,给出:011111111111111111111111111111

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值