今天参考课本写了一个关于二进制与十进制转换的程序,程序算法不难,但写完后测试发现不论是二转十还是十转二,对于大于21亿即超过整数范围的数不能很好的转换。都会变成0.

参考书籍发现使用使用BigInteger可以解决这个问题。

于是查找了下JDK,然后测试几次终于写成功了!

使用心得如下:

 

1,BigInteger属于java.math.BigInteger,因此在每次使用前都要import这个类。偶开始就忘记import了,于是总提示找不到提示符。

 

2,其构造方法有很多,但现在偶用到的有:

BigInteger(String val)

          将 BigInteger 的十进制字符串表示形式转换为 BigInteger。

BigInteger(String val, int radix)

          将指定基数的 BigInteger 的字符串表示形式转换为 BigInteger。

如要将int型的2转换为BigInteger型,要写为BigIntegertwo=new BigInteger("2"); //注意2双引号不能省略

 

3,BigInteger类模拟了所有的int型数学操作,如add()==“+”,divide()==“-”等,但注意其内容进行数学运算时不能直接使用数学运算符进行运算,必须使用其内部方法。而且其操作数也必须为BigInteger型。

如:two.add(2)就是一种错误的操作,因为2没有变为BigInteger型。

 

4,当要把计算结果输出时应该使用.toString方法将其转换为10进制的字符串,详细说明如下:

 

 String

toString()

          返回此 BigInteger 的十进制字符串表示形式。

输出方法:System.out.print(two.toString());

 

5,另外说明三个个用到的函数。   

 BigInteger

remainder(BigInteger val)

          返回其值为 (this % val) 的 BigInteger。

 BigInteger

negate()

          返回其值是 (-this) 的 BigInteger。

 int       

compareTo(BigInteger val)

          将此 BigInteger 与指定的 BigInteger 进行比较。

remainder用来求余数。

negate将操作数变为相反数。

compare的详解如下:

compareTo

public int compareTo(BigInteger val)

将此 BigInteger 与指定的 BigInteger 进行比较。对于针对六个布尔比较运算符 (<, ==, >, >=, !=,<=) 中的每一个运算符的各个方法,优先提供此方法。执行这些比较的建议语句是:(x.compareTo(y) <op> 0),其中 <op> 是六个比较运算符之一。

指定者:

接口 Comparable<BigInteger> 中的 compareTo

参数:

val - 将此 BigInteger 与之比较的 BigInteger。

返回:

当此 BigInteger 在数值上小于、等于或大于 val 时,返回 -1,0,或 1。

import  java.math.BigInteger; 

 

public   class  Test   { 

public   static  void   main(String[]   args)   { 

BigInteger  one   =   new   BigInteger( "1 "); 

BigInteger  two   =   new   BigInteger( "2 "); 

BigInteger  three   =   new   BigInteger( "3 "); 

BigInteger  sum   =   new   BigInteger( "0 "); 

sum.add(one); 

sum.add(two); 

sum.add(three); 

System.out.println(sum.toString()); 

} 

}

 

输出:0

 

add方法返回两个数的和,但是本身的值不变。