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都将移出任何零位,这应该是“向右移位”。。。