我试图将int转换为BigInteger可以有人帮助我吗?

时间:2014-12-24 15:36:42

标签: java

我试图创建一个将值转换为位的程序。一切都运行良好,直到我达到GB(千兆字节)。因此,例如1 GB应该等于80亿位,但结果给了我一个否定的答案。这是我的代码可以有人给我一些见解吗?

else if(line.equals("GB")) {
        Scanner num = new Scanner(System.in);
        System.out.println("How many GigaBytes are you transfering to bits?");
        int number = num.nextInt();
        //int ans = number * 8 * 1000000000;
        BigInteger bigAns = BigInteger.valueOf(number * 8 * 1000000000);
        System.out.println(number + " GigaByte(s) equals " + bigAns + " bits.");
    }

以下是我得到的输出:1 GigaByte(s)等于-589934592位。

4 个答案:

答案 0 :(得分:4)

在整个计算过程中使用BigInteger并不是一件坏事。这样,在乘以这些数字时,不会冒溢出的风险。

BigInteger bigAns = BigInteger.valueOf(number).multiply(BigInteger.valueOf(8))
                              .multiply(BigInteger.valueOf(1000000000L));

答案 1 :(得分:2)

您收到一个负数,因为您超出了有符号32位整数的最大可能值并导致溢出。

当处理这样的大数字时,你应该使用long代替,它能够容纳更大的数字。

要实现此目的,请将int ans = number * 8 * 1000000000更改为long ans = number * 8 * 1000000000l

答案 2 :(得分:0)

你得到的答案是垃圾值。 您可以通过执行以下操作将int转换为BigInteger:

BigInteger bi = BigInteger.valueOf(myInteger.intValue());

正如Bohsulav所说:

您可以使用此号码* 8 * 1000000000l来防止溢出。

帮助了?让我知道:)

答案 3 :(得分:0)

首先转换为biginteger 然后执行计算。

BigInteger.valueOf(number * 8 * 1000000000);

在这里,你在int中执行计算,然后转换为BigInteger ,当它为时已晚

使用BigInteger.valueOf(number),然后调用适当的方法来执行计算。