1、把数字存在字符串中,大数之间的四则运算及其它运算都是通过数组完成;
2、JDK实现,那就是BigInteger;
3、BigInteger已实现的接口:Serializable, Comparable
4、signum属性是为了区分:正负数和0的标志位,整数用1表示,负数用-1表示,零用0表示
5、mag是magnitude的缩写形式,mag数组存储BigInteger数值大小
- big-endian 的顺序,即:高位字节存入低地址,低位字节存入高地址,依次排列的方式
- little-endian 正好相反
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
- 不断做除法取余