关于Java无符号向右位移操作符>>>的问题

在Java和Android开发学习指南(第2版)ISBN 978-7-115-41753-4一书中看到一个关于无符号向右位移操作符的公式。

他是这么写的:如果n是负值,其结果取决于n的类型。如果n是一个int类型,结果的值是(n>>s)+(2<<~s)。如果n是一个long类型,结果的值是(n>>s)+(2L<<~s)。

我现在被这个公式搞得很迷,搜索了半天也没找到跟这个公式相关的东西,而且根据这个公式完全求不出来-9>>>1的结果,希望各位大佬能帮忙解答一下

int类型

long类型

无符号,  又说是‘负值’?  

对于正数来说 >>>与>>效果一样

对于负数来说>>>与>>的区别在于>>>左边是补零的,而>>左边是补1

举个例子

1011 0101 (>> 1)  1101 1010

1011 0101 (>>> 1)  0101 1010

 

正数的无符号右移结果与正数的右移没有区别,区别在于是负数的无符号右移。那来说说负数的无符号右移。

首先说下对于题主给出的公式笔者没有见过,负数的无符号右移的公式还有另一种表示方法,并且笔者可以保证这种方法绝对正确,题主不妨参考下这种方法,俗话说条条大路通罗马,结果都是一样,公式如下:先将负数取反,得到反码,然后反码加1得到补码,补码再进行右移,这样得到的结果就是负数的无符号右移的结果了

您好,我是有问必答小助手,你的问题已经有小伙伴为您解答了问题,您看下是否解决了您的问题,可以追评进行沟通哦~

如果有您比较满意的答案 / 帮您提供解决思路的答案,可以点击【采纳】按钮,给回答的小伙伴一些鼓励哦~~

ps:问答VIP仅需29元,即可享受5次/月 有问必答服务,了解详情>>>https://vip.csdn.net/askvip?utm_source=1146287632

非常感谢您使用有问必答服务,为了后续更快速的帮您解决问题,现诚邀您参与有问必答体验反馈。您的建议将会运用到我们的产品优化中,希望能得到您的支持与协助!

速戳参与调研>>>https://t.csdnimg.cn/Kf0y