java 阶乘求和

来源:百度知道 编辑:UC知道 时间:2024/06/16 03:47:02
package a.b.c;
public class Jiecheng{
public static void main(String[] args){
int i=1;
long t=1, s=0;
for(;i<100;i++){
t=t*i;
s=s+t;
}
System.out.println("1~100的阶乘之和为:"+s);
}
}//起初我将t与s都声明为整型,运算出的结果竟然是负数,怎么没有溢出? 按理说假如已经超出机器所能表示的范围,则也应报 溢出 错误
上述两位朋友讲的我也明白, 我就是想问: 那所谓的机器数溢出这种情况岂不是不存在了? 因为再大的数它都可以取模循环, 如int型就以2的32次方求余循环。 那么什么时候真正出现溢出呢?

声明为整型运算时数据已经溢出了,所以才会得到负数,但是这不是内存溢出,所以不会报溢出错误

JAVA的JVM对 程序的内存进行了管理,控制了 计算的 数据溢出,楼主可以试一下

char a = 1111;//溢出了
System.out.println(a);//a已经溢出,但是不会 提示溢出错误,而是显示了错误的数值.那是因为jvm的处理.

超过了最大值2147483647,int的值就会变成最小值-2147483648

int t=2147483647;
t++;
System.out.println(t);
结果 -2147483648

这个编码问题
可以去看下计算机原码、补码、反码是怎么回事