在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