java =1 ==1_为什么在Java中-1右移1 = -1?

从上面的问题的答案中我完全理解了零填充右移的概念.但是当我试图找到-1>> 1时,我得到一个完全复杂的答案,我觉得很难理解.

-1 in binary form is as follows: 11111111111111111111111111111111

After flipping the bits, I got: 00000000000000000000000000000000

Upon adding 1 to it, I got: 00000000000000000000000000000001

Now shifting one position right: 00000000000000000000000000000000

After flipping the bits, I got: 11111111111111111111111111111111

Now adding 1 to it: 00000000000000000000000000000000

我不明白-1>> 1是-1本身,然后呢?

解决方法:

当执行一个正常的右移位(即,使用与GT;>中也称为一个算术右移,而不是到大于;&GT>中,其是一个逻辑右移),数目为符号扩展.

这是如何工作的如下:

当我们右移时,我们在数字前面得到一个空位,如下所示:

11111111111111111111111111111111

?1111111111111111111111111111111(1) (right-shift it one place)

最后一个被移出,并且来了?

现在,我们如何填写?取决于我们如何转变.

如果我们进行逻辑移位(即>>>),我们只需用0填充它.

如果我们做了算术移位(即&GT&1+),我们有从原来的数的第一位,即,符号位(因为它是1,如果该数是负的,而0如果不)填充.这称为符号扩展.

因此,在这种情况下,-1>> 1符号 – 将1扩展到?,保留原始-1.

进一步阅读:

标签:java,bit-manipulation

来源: https://codeday.me/bug/20190517/1120865.html

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值