gpt4 book ai didi

java - Java/Perl 中的按位差异

转载 作者:塔克拉玛干 更新时间:2023-11-01 21:45:57 25 4
gpt4 key购买 nike

当我移动 -1 时,我四处乱逛,注意到我不理解 Java 和 Perl 之间的差异。

我认为整数存储在二进制补码中,所以如果有 32 位,-1 是 11...11(32 次)。
我期望 -1 >> 1 给出 $2^31 - 1$ = 011...11 = 2147483647。
我希望 -1 << 1 给出 = 11...110 = -2。

这些不同行为的原因是什么?这些标准在哪里用不同的语言表述?

下面是 Perl 和 Java 的代码和打印输出:

在 Perl 中:

print (-1 >> 1, "\n");
print (-1 << 1, "\n");

2147483647

4294967294

在 Java 中:

public class Tempy {
public static void main(String[] args){
System.out.println( -1 >> 1);
System.out.println( -1 << 1);
}
}

-1

-2

最佳答案

Perl 的移位本质上是无符号的,所以 -1 被视为 2^32 -1 并且它自动填充为 0 所以 -1 >> 1是 2^31-1 和 -1 << 1是 2^32-2。

[编辑] 感谢@Powerlord 使用 integer 将强制 perl 使用带符号的值。

Java 的移位符号扩展(如果使用 >> )所以 -1 << 1仍然是 -1 和 -1 >> 1是-2。如果您不想签署扩展,则必须使用逻辑版本 >>> .

关于java - Java/Perl 中的按位差异,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31747697/

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