码迷,mamicode.com
首页 > 编程语言 > 详细

1.24 Java周末总结 乘法数据的溢出 判断字符串是否为纯数字

时间:2016-01-24 15:30:04      阅读:302      评论:0      收藏:0      [点我收藏+]

标签:

一、乘法数据的溢出

背景:在算阶乘时,当数字太大后,结果为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周末总结 乘法数据的溢出 判断字符串是否为纯数字

标签:

原文地址:http://www.cnblogs.com/chenyuanqiu2008/p/5155183.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!