2017-12-27 246 views
0

嘿,我试图运行下面的代码块,它实际上使用负移位值右移了负整数值。类似(negative integer)>>(negative shift value)在负整数上负移位值的右移

但有趣的是,发现的是什么是什么,无论移位的值是多少&整数的值每次产生的结果为-1。 PLZ解释为什么答案总是-1

实施例:

 -8>>-9 
     Result: -1 
     -10>>-8 
     Result: -1 
     -8>>-2 
     Result: -1 

这个问题实际上是约负位移值上负整数的整数值是如何工作的右移位使用>>和不是简单的二进制右移位。

+1

行为阅读本 http://geekexplains.blogspot.co.il/2009/05/binary-rep -of-negative-numbers-in-java.html – GuyKhmel

+0

@GuyKhmel感谢您的URL。但我真正想知道的是,正确的转变与负转变价值实际上是什么? – Prometheus

+0

@Prometheus我发现的另一篇文章是这样的:http://www.informit.com/articles/article.aspx?p=30868&seqNum=6 查看最后一个例子 – GuyKhmel

回答

-1

我的解释是这样的:

根据This article

右移相同除以二的幂。 当您在负数值上使用负数(-8>>-9)时也一样。例如-8>>-1 => -4

当你归结为-1,那么你得到-1/2 => -1喜欢在整数

+0

使用-9实现移位,实际移位为'-9&0x1f' == 17 int或'-9&0x3f' == 37长时,-1只是因为在Java中左移用'>>'使用符号扩展,并且17和37都将移出任何零位 - 8。 –

+0

糟糕,应该读“向右移”... –