我是靠谱客的博主 娇气楼房,最近开发中收集的这篇文章主要介绍java 右移补1,为什么-1右移1 = -1在Java中?,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

I understood the concept of zero fill right shift perfectly well from the above question's answer. But when I tried to find -1>>1, I am getting a totally complex answer which I felt difficult to understand.

-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

I don't understand how -1>>1 is -1 itself, then?

解决方案

When you do a normal right-shift (i.e. using >>, also known as an arithmetic right shift, as opposed to >>>, which is a logical right shift), the number is sign extended.

How this works is as follows:

When we right-shift we get an empty spot in front of the number, like so:

11111111111111111111111111111111

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

The last 1 is shifted out, and in comes the ?.

Now, how we fill in the ? is dependent on how we shift.

If we do a logical shift (i.e. >>>), we simply fill it with 0.

If we do a arithmetic shift (i.e. >>), we fill it with the first bit from the original number, i.e. the sign bit (since it's 1 if the number is negative, and 0 if not). This is called sign extension.

So, in this case, -1 >> 1 sign-extends the 1 into the ?, leaving the original -1.

Further reading:

最后

以上就是娇气楼房为你收集整理的java 右移补1,为什么-1右移1 = -1在Java中?的全部内容,希望文章能够帮你解决java 右移补1,为什么-1右移1 = -1在Java中?所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(40)

评论列表共有 0 条评论

立即
投稿
返回
顶部