Java的范围是什么? [英] Java the range of int?

查看:348
本文介绍了Java的范围是什么?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

I understand that int range in Java should be -2^31 to 2^31-1. But when I run this code snippet with 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开始没有意义看起来它超出范围而且四处乱窜。怎么了?是否由于我正在使用Eclipse?

It's not making sense from 13. Looks like it's out of range and wraped around. What's wrong? Is it due to Eclipse that I'm using?

虽然我认为它不相关,但这里是测试代码:

Though I think it's not relevant, here is the test code:

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

Here I would like to mention the concept of integer clock. Max and min values for int in java are 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范围的整数范围时,下一个值会再次从其负起始值开始。

It shows that when you go beyond the limit of +ve range of integer, the next values starts from its negative starting value again.

 -2147483648,       <-----------------
 -2147483647,                        | 
 -2147483646,                        |  
  .                                  |
  .                                  |
  .                                  |    (next value will go back in -ve range)
  0,                                 |
 +1,                                 |
 +2,                                 |   
 +3,                                 |
  .                                  |
  .                                  |
  .,                                 |
 +2147483645,                        |    
 +2147483646,                        | 
 +2147483647     ---------------------

如果计算阶乘13,则为6227020800.
此值超出java的int范围。
所以新价值将是

If you calculate the factorial of 13 it is 6227020800. This value goes beyond int range of java. So new value will be

        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。
这是整数时钟的工作方式。

So, in your answer factorial of 13 is coming 1932053504. This is how integer clock works.

您可以使用long数据类型而不是整数来实现您的目的。
如果您有任何疑问,可以在此处发布。

You can use long datatype instead of integer to achieve your purpose. For any queries you can post here.

这篇关于Java的范围是什么?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆