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周末总结 乘法数据的溢出 判断字符串是否为纯数字的主要内容,如果未能解决你的问题,请参考以下文章

1.24日总结

考前自学系列·计算机组成原理·补码定点加减运算和溢出判断,浮点数的加减运算,原码的乘法

经过几次乘法**溢出**后,是不是可以得到一个数字的原始值?

了解OutOfMemoryError异常 - 深入Java虚拟机读后总结

万字总结!java语言基础知识入门

[总结] 2016.12.15 星期四