gpt4 book ai didi

java - Java中int的范围

转载 作者:行者123 更新时间:2023-12-03 23:13:28 26 4
gpt4 key购买 nike

我知道 Java 中的 int 范围应该是 -2^31 到 2^31-1。
但是当我用 20 运行这个代码片段时:

public class Factorial {
public int factorial(int n) {
int fac=1;
for (int i=1; i<=n; i++) {
fac *= i;
System.out.println("Factorial of " + i + " is: " + fac);
}
return fac;
}
}
输出:
Factorial of 1 is: 1
Factorial of 2 is: 2
Factorial of 3 is: 6
Factorial of 4 is: 24
Factorial of 5 is: 120
Factorial of 6 is: 720
Factorial of 7 is: 5040
Factorial of 8 is: 40320
Factorial of 9 is: 362880
Factorial of 10 is: 3628800
Factorial of 11 is: 39916800
Factorial of 12 is: 479001600
Factorial of 13 is: 1932053504
Factorial of 14 is: 1278945280
Factorial of 15 is: 2004310016
Factorial of 16 is: 2004189184
Factorial of 17 is: -288522240
Factorial of 18 is: -898433024
Factorial of 19 is: 109641728
Factorial of 20 is: -2102132736
从 13 (13! = 6,227,020,800) 开始就没有意义了。看起来它超出了范围并被缠绕。怎么了?是不是因为 Eclipse我正在使用?
虽然我认为它不相关,但这里是测试代码:
public class TestFac {

public static void main(String[] args) {
int n;
Scanner sc = new Scanner(System.in);

System.out.println("Input num you want to factorial: ");
n = sc.nextInt();
Factorial fac = new Factorial();
fac.factorial(n);
}
}

最佳答案

这里我想提一下整数时钟的概念。
Java 中 int 的最大值和最小值是:

int MAX_VALUE = 2147483647
int MIN_VALUE = -2147483648
请检查以下结果
 int a = 2147483645;
for(int i=0; i<10; i++) {
System.out.println("a:" + a++);
}
输出:
a:2147483645
a:2147483646
a:2147483647
a:-2147483648
a:-2147483647
a:-2147483646
a:-2147483645
a:-2147483644
a:-2147483643
a:-2147483642
它表明当您超出整数 +ve 范围的限制时,下一个值再次从其负起始值开始。
 -2147483648,       <-----------------
-2147483647, |
-2147483646, |
. |
. |
. | (the next value will go back in -ve range)
0, |
+1, |
+2, |
+3, |
. |
. |
., |
+2147483645, |
+2147483646, |
+2147483647 ---------------------
如果计算 13 的阶乘,则为 6227020800。
这个值超出了java的int范围。
所以新值将是
        6227020800
- 2147483647 (+ve max value)
-----------------
Value = 4079537153
- 2147483648 (-ve max value)
-----------------
value = 1932053505
- 1 (for zero in between -ve to +ve value)
----------------
Answer = 1932053504
所以,在你的回答中,13 的阶乘变成了 1932053504。这就是整数时钟的工作原理。
您可以使用 long 数据类型而不是 integer 来实现您的目的。

关于java - Java中int的范围,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14020097/

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