首先,我们来讨论一个话题,是否存在一个数,使得这个数加一之后小于这个数呢?表面来看是不可能的。那么接下来,来看下面这个代码:
public class Day1 {
public static void main(String[] args) {
int num = Integer.MAX_VALUE;
int num1 = num + 1;
System.out.println("num = " + num);
System.out.println("num1 = " + num1);
}
}
程序执行结果:
这就是下面要介绍的数据溢出问题。对于int , long, double等基本数据类型,都有自己的保存范围,一旦超过这个界限,则会出现数据溢出问题。我们以127和-128为例,来进行解释:
在计算机中数据的存储都是用补码的编码方式存储的。对一个数的二进制序列它的最高位是符号位。0表示正数,1表示负数。
127的二进制序列:0111 1111
-128的二进制序列 : 1000 0000
也就是说当127加一后,它的后面是-128,最大的正数加下来是最小的负数。
接下来我们来看一个求斐波那契额序列的代码:
public class Test {
public static void main(String[] args){
System.out.println(fact(50));
System.out.println(fact(5));
}
public static long fact(int x){
if(x == 1){
return 1L;
}
return x * fact(x-1);
}
}
当进行小数据的求斐波那契的时候,int型完全够用。但是当所数值过大时,int就不够用了,所以使用long进行存储,防止数据丢失。