Java中存储数字的类型有 short,int,long,double,float。他们的存储数据的大小是有限制的。以下来回顾下各个数据类型的存储大小的差别:
1、
基本类型:short 二进制位数:16
包装类:java.lang.Short
最小值:Short.MIN_VALUE=-32768 (-2的15此方)
最大值:Short.MAX_VALUE=32767 (2的15次方-1)
2、
基本类型:int 二进制位数:32
包装类:java.lang.Integer
最小值:Integer.MIN_VALUE= -2147483648 (-2的31次方)
最大值:Integer.MAX_VALUE= 2147483647 (2的31次方-1)
3、
基本类型:long 二进制位数:64
包装类:java.lang.Long
最小值:Long.MIN_VALUE=-9223372036854775808 (-2的63次方)
最大值:Long.MAX_VALUE=9223372036854775807 (2的63次方-1)
4、
基本类型:float 二进制位数:32
包装类:java.lang.Float
最小值:Float.MIN_VALUE=1.4E-45 (2的-149次方)
最大值:Float.MAX_VALUE=3.4028235E38 (2的128次方-1)
5、
基本类型:double 二进制位数:64
包装类:java.lang.Double
最小值:Double.MIN_VALUE=4.9E-324 (2的-1074次方)
最大值:Double.MAX_VALUE=1.7976931348623157E308 (2的1024次方-1)
在面试的时候我们经常会遇到到这样的笔试题,设计一款能够计算无限大小的计算器。今天我用java代码实现加法:
public String add(String str1,String str2) {
//找出两个数据中长度较小的一个
StringBuffer longStr = new StringBuffer(0+str2);
StringBuffer shortStr = new StringBuffer(0+str1);
if(str1.length()>str2.length()) {
longStr = new StringBuffer(str1);;
shortStr = new StringBuffer(str2);;
}
int longLength = longStr.length();
int shortLength = shortStr.length();
int addIndex = 0;
int result = 0;
for(int i =0;i<shortLength;i++) {
int l = longStr.charAt(longLength-i-1) -"0".charAt(0);//长数字在在longLength-i-1位置上的数字
int s = shortStr.charAt(shortLength-i-1) - "0".charAt(0);//短数字在在shortLength-i-1位置上的数字
result = s + l + addIndex;
if(result<10) {
addIndex = 0;
}else {
addIndex = (""+result).charAt(0) -"0".charAt(0);
result = (""+result).charAt(1) -"0".charAt(0);
}
longStr.replace(longLength-i-1, longLength-i, ""+result);
}
String addResult = longStr.toString();
if(addResult.startsWith("0")) {
return addResult.substring(1);
}
return addResult;
}
以上是正整数的加法实现,基本思路是:用字符串来存储数字,通过遍历字符串,让他们每一位上的数字相互加减来完成的。带小数点的计算其实也比较简单,带小数的数字分成小数点前和小数点后,分别调用上面的add方法,将得到的数字进行拼接即可。我很懒,就没有去实现了。
加法完成之后,乘法就很简单了。可以很简单粗暴的 将同一个数字重复调用 add方法n次,不过这种实现太lowB了,效率很低。有一种比较高效的方法,下午再写。现在我要去吃饭了。