gpt4 book ai didi

java - 0x80000000 在 Java 中如何等同于 -2147483648?

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:31:06 25 4
gpt4 key购买 nike

获取 0x80000000 的二进制文件我们得到

1000 0000 0000 0000 0000 0000 0000 0000

这如何等于 -2147483648 .我通过这个程序得到了这个问题。

class a
{
public static void main(String[] args)
{
int a = 0x80000000;
System.out.printf("%x %d\n",a,a);
}
}

meow@VikkyHacks:~/Arena/java$ java a
80000000 -2147483648

编辑 我了解到 2 的补码用于表示负数。当我试图将其等同于 1 的补码时,

1's Comp. :: 0111 1111 1111 1111 1111 1111 1111 1111
2's Comp. :: 1000 0000 0000 0000 0000 0000 0000 0000

这又没有任何意义,0x80000000 怎么办?等于-2147483648

最佳答案

这就是 signed integer overflow 发生的情况, 基本上。

byte为例更简单。 byte 值始终在 -128 到 127(含)范围内。因此,如果您的值是 127(即 0x7f),如果您加 1,您将得到 -128。这也是将 128 (0x80) 转换为 byte 时得到的结果:

int x = 0x80; // 128
byte y = (byte) x; // -128

溢出(在 2s 补码整数表示中)总是从最高可表达数到最低数。

对于unsigned 类型,最高值溢出到 0(这又是最低的可表达数)。这在 Java 中更难显示,因为唯一的无符号类型是 char:

char x = (char) 0xffff;
x++;
System.out.println((int) x); // 0

关于java - 0x80000000 在 Java 中如何等同于 -2147483648?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18813875/

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