gpt4 book ai didi

Java打印整数与Integer.toHexString() : Different outputs

转载 作者:行者123 更新时间:2023-12-02 06:02:01 24 4
gpt4 key购买 nike

在确定 Java 如何存储和检索整数时,我遗漏了一些内容。我有以下代码

public class Test1 {
public static void main(String args[]) {

int a = 100;

int negateA = (a | 0x80000000);

System.out.println("Negative A: " + negateA);
System.out.println("Negative A in HEX: " + Integer.toHexString(negateA));

}
}

输出:

Negative A: -2147483548
Negative A in HEX: 80000064

从输出中,十六进制值对我来说很有意义,因为我设置了整数的最高有效位,而该值的其余部分指示其十进制值为 100,这就是我最初设置的值。

我不明白为什么当我只打印整数时我得到-2147483548

java 内部存储数字的方式和检索数字的方式有区别吗?

最佳答案

这不是从正数得到负数的方法! Java使用two's complement .

为了反转 int 的符号(无论它最初是正数还是负数),您可以:

~val + 1

对于longbyteshort也是如此。

唯一不起作用的数字是 0x80000000,即 Integer.MIN_VALUE,即 -2^31。但这是 n 位二进制补码表示的特征之一:它可以表示范围从 -2^(n-1) 到 2^(n-1) - 1 的数字。

以1为例:

0x00000001 // i = 1
0xFFFFFFFE // ~i
0xFFFFFFFF // ~i + 1 == -1

0xFFFFFFFF // i = -1
0x00000000 // ~i
0x00000001 // ~i + 1 == 1

关于Java打印整数与Integer.toHexString() : Different outputs,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22596864/

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