Gitchat连接
https://gitbook.cn/gitchat/activity/5f395a80aced402379f6a0ca
简介
从底层,从原理,我们来重学一次 Java。BigInteger 是大整数计算类,是BigDecimal用于存储大数属性的类型,BigDecimal中很多计算就是基于BigInteger的函数进行计算的,采用了多种优化的算法实现,他的源码及实现是怎样的呢?
本系列秉承所有结论尽量从源码中来,没有源码的尽量标明出处。相关源码会附着在文章中,读本文即可,不用再自行查找源码及资料学习,方便大家充分利用路上的碎片时间。
本篇 Chat 对BigInteger的属性、构造函数、四则运算、位移等进行逐一源码分析,帮助大家深入理解和学习 JDK 源码的牛掰优化。
本文包含以下内容:
- 类信息
- 类的定义
- 类的继承结构
- 静态代码块
- 静态代码块1及相关的常量
- MAX_CONSTANT
- posConst
- negConst
- 静态代码块2及相关的常量
- zeros
- 静态代码块1及相关的常量
- 常量
- 属性
- signum
- mag
- 构造函数
- BigInteger(int[] magnitude, int signum)
- BigInteger.ZERO
- 三个静态数组
- bitsPerDigit
- digitsPerInt
- intRadix
- BigInteger(String val)
- private BigInteger(long val)
- 四则运算
- 加
- add(BigInteger val)
- int compareMagnitude(BigInteger val)
- int[] add(int[] x, int[] y)
- int[] subtract(int[] big, int[] little)
- 减
- 乘
- BigInteger multiply(BigInteger val)
- BigInteger multiply(BigInteger val, boolean isRecursion)
- BigInteger multiplyByInt(int[] x, int y, int sign)
- int[] multiplyToLen(int[] x, int xlen, int[] y, int ylen, int[] z)
- Karatsuba算法
- 实现原理
- BigInteger multiplyKaratsuba(BigInteger x, BigInteger y)
- BigInteger getLower(int n)
- BigInteger getUpper(int n)
- BigInteger abs()
- Integer.numberOfLeadingZeros()
- Toom-Cook 3路算法
- BigInteger multiplyToomCook3(BigInteger a, BigInteger b)
- BigInteger getToomSlice(int lowerSize, int upperSize, int slice,int fullsize)
- exactDivideBy3
- 平方计算
- implSquareToLen
- squareKaratsuba
- squareToomCook3
- 除
- BigInteger divide(BigInteger val)
- Knuth算法
- MutableBigInteger
- MutableBigInteger.divideKnuth
- divideOneWord
- divideMagnitude
- Integer.numberOfTrailingZeros
- copyAndShift
- Burnikel-Ziegler算法
- 算法文章
- 第一步计算
- divide2n1n
- divide3n2n
- divideAndRemainderBurnikelZiegler主算法
- Arrays.fill
- 加
- 位运算
- 左移
- 右移
- valueOf
- 其他计算及比较
- BigInteger abs()
适用人群:有一些 Java 基础的人群。