【问题标题】:Why doesn't bit shift work for -1 in java? [duplicate]为什么移位不适用于java中的-1? [复制]
【发布时间】:2017-01-31 16:20:27
【问题描述】:

我尝试在java中做-1 >> 1,但打印的结果仍然是-1,一开始我以为这是因为算术右移的符号扩展性质。但是通过额外的测试,我发现-1 >> [0, 64]-1。为什么会这样?

【问题讨论】:

  • 算术右移的符号扩展性质。 -10xffffffff;最左边的位是1,所以当你算术右移时你会得到更多的1位,所以它保持0xffffffff
  • @AdrianColomitchi 不是那个问题的重复。在这种情况下,答案与移位运算符仅使用移位量的低 5 位这一事实有关,因此1>>321>>0 相同。这个问题是关于符号扩展的。我确定这是一个骗局,只是不是那个问题。

标签: java bit-manipulation


【解决方案1】:

这是因为符号扩展。 -1 由仅包含 1 的位序列表示。因此,使用带符号扩展的右移始终会产生所有位为 1 的序列,即-1,而不管位移的第二个操作数如何。

【讨论】:

  • @KelvinZhang 没有符号位。如果设置了最高位,则这意味着从其他位表示的(无符号)数字中减去 2^31。 (2 的补码表示)
猜你喜欢
  • 2015-11-29
  • 1970-01-01
  • 2012-12-23
  • 1970-01-01
  • 1970-01-01
  • 2011-07-01
  • 1970-01-01
  • 2014-08-19
  • 1970-01-01
相关资源
最近更新 更多