gpt4 book ai didi

java - 为什么右移运算符产生零而不是一?

转载 作者:搜寻专家 更新时间:2023-11-01 04:01:00 25 4
gpt4 key购买 nike

我正在自学 Java,并完成 Thinking in Java 中的练习。

在第 116 页的练习 11 中,您应该右移一个整数的所有二进制位置,并使用 Integer.toBinaryString 显示每个位置。

public static void main(String[] args) {
int i = 8;
System.out.println(Integer.toBinaryString(i));
int maxIterations = Integer.toBinaryString(i).length();
int j;
for (j = 1; j < maxIterations; j++) {
i >>= 1;
System.out.println(Integer.toBinaryString(i));
}

在解决方案指南中,输出如下所示:

1000
1100
1110
1111

当我运行这段代码时,我得到了这个:

1000
100
10
1

这是怎么回事。数字被截断了吗?

我使用的是 jdk1.6.0_20 64 位。本书使用jdk1.5 32bit。

最佳答案

看来这本书有错误。

右移操作将所有位向右移动,移除最低有效位。如果您右对齐结果(例如,通过用零填充),这会更有意义。

00001000
00000100
00000010
00000001
00000000

移入的最高位是:

  • 0 如果你的数字是正数
  • 1 如果你的数字是负数。

如果您希望最终结果为 1,请尝试使用负数,例如 -8 而不是 8。

11111111111111111111111111111000
11111111111111111111111111111100
11111111111111111111111111111110
11111111111111111111111111111111

如果您使用 >>> 而不是 >>>,则无论数字是正数还是负数,都将始终移入一个零。

关于java - 为什么右移运算符产生零而不是一?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3007860/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com