- BigInteger存储大数的方式就是将数字存储在一个整型的数组中
- 只用一个整型数组的话,如何表示一个整数的正负呢?
- 那么就需要有一个单独的成员变量来标明该数的正负。
-
18927348*(10^9)^2 +347389543*(10^9)+834934878,最终从整体上来看mag数组保存的是一个10^9进制的数.
1、以前把数字存在字符串中,大数之间的四则运算及其它运算都是通过数组完成;
2、JDK实现,那就是BigInteger;
3、BigInteger已实现的接口:Serializable, Comparable
4、signum属性是为了区分:正负数和0的标志位,整数用1表示,负数用-1表示,零用0表示
5、mag是magnitude的缩写形式,mag数组存储BigInteger数值大小
- big-endian 的顺序,即:高位字节存入低地址,低位字节存入高地址,依次排列的方式
- little-endian 正好相反
构造方法1
public BigInteger(byte[] val) { if (val.length == 0) throw new NumberFormatException("Zero length BigInteger"); if (val[0] < 0) { mag = makePositive(val); //这个函数的作用是将负数的byte字节数组转换为正值。 signum = -1; //如果数组第一个值为负数,则将数组变正存入mag,signum赋-1 } else { mag = stripLeadingZeroBytes(val);//如果非负,则可直接去掉前面无效零,再赋给mag signum = (mag.length == 0 ? 0 : 1); }}
构造方法2:直接字符串转BigInteger
public static void main(String[] args) { BigInteger bigInteger = new BigInteger("123456789987654321123456789987654321123456789987654321"); System.out.println(bigInteger);}...//实现,10代表十进制 public BigInteger(String val) { this(val, 10);}
- java中int表示
-2^31至2^31-1
即-2147483648~2147483647
- 一个int值最多可保存一个10位十进制的整数,存在溢出,保存9位最好
- jdk将 18927348347389543834934878 分为18927348 | 347389543 | 834934878保存
mag[0]
保存18927348 ,mag[1]
保存347389543 ,mag[2]
保存834934878
6、BigInteger是不可变的任意精度的整数
7、以二进制补码形式表示 BigInteger(如 Java 的基本整数类型)
8、BigInteger 提供所有 Java 的基本整数操作符的对应物
9、并提供 java.lang.Math 的所有相关方法
10、如何mag数组转换为原来的数串
- 不断做除法取余