Java 负整数上带负移位值的右移位
嘿,我试着运行下面的代码块,它实际上使用负移位值右移位一个负整数。类似于Java 负整数上带负移位值的右移位,java,bit-manipulation,Java,Bit Manipulation,嘿,我试着运行下面的代码块,它实际上使用负移位值右移位一个负整数。类似于(负整数)>>(负移位值) 但有趣的是,无论移位的值是多少,每次它产生-1的结果时,整数的值都是多少。请解释为什么答案总是-1 例如: -8>>-9 Result: -1 -10>>-8 Result: -1 -8>>-2 Result: -1 这个问题实际上是关于负移位值如何在使用>>右移的负整数值上工作,而不是简
(负整数)>>(负移位值)
但有趣的是,无论移位的值是多少,每次它产生-1
的结果时,整数的值都是多少。请解释为什么答案总是-1
例如:
-8>>-9
Result: -1
-10>>-8
Result: -1
-8>>-2
Result: -1
这个问题实际上是关于负移位值如何在使用>>右移的负整数值上工作,而不是简单的二进制右移。我的解释如下: 据 右移等于将其除以二的幂。 当你在两边都使用负数(
-8>-9
)和负值时也是如此。例如-8>-1=>-4
当你降到-1时,你会得到
-1/2=>-1
就像整数的行为一样阅读这个@GuyKhmel感谢你的URL。但我真正想知道的是,负移位值的右移到底有什么作用?@Prometheus我发现的另一篇文章是:看看最后一篇example@GuyKhmel请更具体一点,结果并不总是-1,当两个负数都接近零时,这种情况就会发生。用-9移位实际上是用-9&0x1f
==17表示int或-9&0x3f
==37表示长时间,-1只是因为在Java中,用>
向左移位使用符号扩展,在-8.Oops的情况下,17和37都将移出任何零位,这应该是“向右移位”。。。