1.24 Java周末总结 乘法数据的溢出 判断字符串是否为纯数字
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了1.24 Java周末总结 乘法数据的溢出 判断字符串是否为纯数字相关的知识,希望对你有一定的参考价值。
一、乘法数据的溢出
背景:在算阶乘时,当数字太大后,结果为0,此时引出了数据在算乘法时数据的溢出 10!或者100!
byte 8位 8! = -27=-128 (转换到byte允许数据范围内) 9!等于8! 10!=0
short 16位 16!= -215 (转换到short允许数据范围内) 17!等于16! 18!=0
int 32位 32!=-231 (转换到int允许数据范围内) 33!等于32! 34!=0
long 64位 64!=-263 (转换到long允许数据范围内) 65!等于64! 65!=0
说明在等于数据类型它自己的位数时,等于负的最小值,
在下一阶乘时也等于最小负值(n个数据一圈个数,比如byte就是n个28)
在下一阶乘时等于0,即n个半圈,比如byte类型就是n个128(27)
结论:算阶乘时即数据类型那位和下一位等于最小值,加2位为0
测试代码如下:
byte a = 1;
for(byte n = 1; n < 100;n++){
a = (byte)(a * n);
System.out.println(n+"!"+"="+a);
}
int b = 1;
for(int n = 1; n < 100;n++){
b = (int)(b * n);
System.out.println(n+"!"+"="+b);
}
测试结果如下:
同理,short和long型一样;double因为有小数,所以结果是无穷大,结果如下
根据结果可改成如下的数学表达式,还没有推理证实
int sum = 1*2*3*4*.......*32 = -231+n*232 (n为正整数,且这是0到32以内第一个可以表达的,即乘到32时n为可以的最小正整数,)
byte sum = 1*2*3*...*8 = -128+n*28
二、判断数字是否为纯数字:
以上是关于1.24 Java周末总结 乘法数据的溢出 判断字符串是否为纯数字的主要内容,如果未能解决你的问题,请参考以下文章
考前自学系列·计算机组成原理·补码定点加减运算和溢出判断,浮点数的加减运算,原码的乘法
经过几次乘法**溢出**后,是不是可以得到一个数字的原始值?