解释左移在 Java 中的工作原理[重复]

问题描述 投票:0回答:1

朋友们。

你能解释一下为什么下面的程序代码向控制台输出值-32吗?

int num = 0xFFFFFFE;
for(int i=0; i < 4; i++) {
  num = num << 1;
  System.out.println(num);
}

程序产生以下结果:

536870908
1073741816
2147483632
-32

我知道当二进制数移至最高位(第31位)时,该值变为负数。

我不太明白为什么是-32。 为什么不是-16或-8,即结果是-32?

如果您能更详细地向我解释这一点,我会很高兴。如果你能在答案中附上图片,那就太好了。

我希望我的问题不是愚蠢的。

java binary bit-manipulation bit bit-shift
1个回答
0
投票

Java 使用 补码 来表示负数,最后的移位使

num
包含

0xFFFFFFE0

使用二进制补码得到 -32。

© www.soinside.com 2019 - 2024. All rights reserved.