Java基础学习(2)——Java设计连续自然数相乘得到字符类型最值问题
public class Example5 {
public static void main(String args[]) {
int x=1;
for (int a = 1; a <= 11; a++) {
x=x*a;
}
System.out.println("x的值是" + x);
}
}
不难看出在这个例子当中,我们设计的是让从1开始,一直到10以内的自然数连续相乘,其输出结果是362800,这个数字已经非常大了,当我把限定条件改为20,程序直接输出错误的结果,于是不由得会想起来int类型的最值问题,int类型在内存中占4个字节,即32位,每一位存放一个数据,不考虑负数情况的话,它的最大值是2^32-1,而实际情况下我们必须要考虑到负数情况。
所以它的最大值就是2^32/2-1 即2^31-1是2147483647,平常可能很少会到这个值,但是在指数爆炸型运算时候,这个最大值就显得很无力了,需要好好规避这个小误区。遇到数值特别大的整数时,可以选择使用long长整型,它有64位,所以当一些数字特别大而又需要整个引用的话,它可以帮我们好好规避这个问题。
接下来时long数据类型的一个小运用,众所周知,光年是一个距离单位,用米来形容数据量是有点夸张的,所以我们用long类型来计算这一单位,来证明它强大的数值存储范围。
public class Example6 {
public static void main(String args[]){
long ls=299792458;
long s=60;
long m=60;
long h=24;
long d=365;
long distance=ls*s*m*h*d;
System.out.println("一光年的距离为"+distance+"米");
}
}
运行可以得到我们程序的结果:
可以看出数值如此之大,在long数据类型中也可以计算出结果。
还有其他的整数类型像是short、byte,它们分别是2个和一个字节,同理即它们的运算值范围是:-2^15 -1 ~~ 2^15 -1;-2^7 -1~2^7-1;在这之后的编程,要多加小心。
感谢您的阅读