Java的BigInteger实现代码看不懂
// bitsPerDigit in the given radix times 1024
// Rounded up to avoid underallocation.
private static long bitsPerDigit[] = { 0, 0,
1024, 1624, 2048, 2378, 2648, 2875, 3072, 3247, 3402, 3543, 3672,
3790, 3899, 4001, 4096, 4186, 4271, 4350, 4426, 4498, 4567, 4633,
4696, 4756, 4814, 4870, 4923, 4975, 5025, 5074, 5120, 5166, 5210,
5253, 5295}; //如何得来的?
// Pre-allocate array of expected size. May be too large but can
// never be too small. Typically exact.
int numBits = (int)(((numDigits * bitsPerDigit[radix]) >>> 10) + 1); //是什么意思?
int numWords = (numBits + 31) /32;
mag = new int[numWords];
其中 numDigits 为数字个数,如 "334455", numDigits是6
------解决方案--------------------楼主想问的是
这个为什么要这么实现是吧?
我劝LZ暂时不要深究
等你把JDK弄明白了 就会想到为什么要这么实现了
然后你会觉得还有很多其他的实现方式
SUN选择这么做并不是一定要这么做
他要做的只是要选择一种实现的方式把他实现出来
所有就这么做了
------解决方案--------------------现在的机器的寄存器是无法放 bigInt 这么大的值的。所以他移位就数据变小,然后用一个 int[] 保存bigInt每一位的值。为什么那个数据阵列会那样取值。可能是和硬件也有点关系。只能发mail去问sun咯。