簡體   English   中英

Java Integer最大范圍乘法

[英]Java Integer Max Range multiplication

Integer num = 2147483647;
Integer res =  num * num;
System.out.println(res);

上面的輸出是1.不確定為什么。 有人可以解釋一下。

提前致謝。

這應該證明為什么結果= 1:

    long x = Integer.MAX_VALUE;
    long y = Integer.MAX_VALUE;
    long res = x * y;
    System.out.println(Long.toHexString(res));

版畫

3fffffff00000001

如果我們將res轉換為int,我們將得到1

這是因為整數溢出。 Java的最小值為-2,147,483,648,最大值為2,147,483,647(含),並且您的結果超出了Integer max范圍。

這是因為標志值
0: iconst_0
1: istore_1

由於限制是超出范圍的Integer它將設置的標志1為進一步了解它是如何工作使用這個鏈接

這是因為它會溢出整數范圍,甚至是-2,147,483,648和最大值2,147,483,647(含)之間的較長范圍。

如果是這樣,您應該嘗試使用BigInteger:

String num = "2147483647";
BigInteger mult = new BigInteger(num);
System.out.println(mult.multiply(mult));

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM