BigInteger 对我的号码来说很小

BigInteger is small for my number

我在 java 中使用了非常大的数字。我正在使用 BigInteger。我的十六进制数字是 0xffffffff00000001000000000000000000000000ffffffffffffffffffffffff

十进制是这样的: 1.1579208921035625e+77

代码:

public class BigNumber
{
    public static void main(String[] args)
    {
        BigInteger fp = new BigInteger(0xffffffff00000001000000000000000000000000ffffffffffffffffffffffff);
    }
}

然后出现错误:

BigNumber.java:5: error: integer number too large: ffffffff00000001000000000000000000000000ffffffffffffffffffffffff
        BigInteger fp = new BigInteger(0xffffffff00000001000000000000000000000000ffffffffffffffffffffffff);

如何在不丢失数据的情况下使用这个大数字?这可能吗 ?我以为 BigInteger 只受内存限制。

那是因为你需要使用String constructor, that also takes a radix。在本例中,基数为 16。

public static void main(String[] args) {
    BigInteger fp = new BigInteger("ffffffff00000001000000000000000000000000ffffffffffffffffffffffff", 16);
    System.out.println(fp);
}

在您的代码段中,十六进制值被转换为 int,因为它是 integer literal,并且由于它太大而无法放入 int,因此会引发错误.

由于您不使用 String 来包含数据,因此 java 编译器将其视为 int 并相应地进行处理。对于类型 int:

来说显然太大了

使用

new BigInteger("ffffffff00000001000000000000000000000000ffffffffffffffffffffffff", 16)

相反。

文字 0xfff.. 是整数文字。编译器检测到文字溢出,这会导致编译错误。

可以放在字符串中,指定基数为BigDecimal

BigInteger fp = new BigInteger("ffffffff00000001000000000000000000000000ffffffffffffffffffffffff",16);

顺便说一句,不存在采用整数作为参数的构造函数,但编译器选择 return 此错误消息。