急!急!急!关于BigInteger 我想问下BigInteger是怎样实现以尽可能小的内存存储大整数的? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 你去看看jdk的源代码不就知道了。在jdk的安装目录下有一个src.zip 当然是看了源代码,但看不明白,谁看过源代码并能还原出类BigInteger的实现原理(采用什么公式或定理及其证明)等可以告诉我么? 为什么要知道实现?会调用不就好了。Reinventing the wheel... http://topic.csdn.net/u/20090829/21/48938267-4b8c-4ea7-87da-51be71e89c8d.html 主要就是用一个int数组来存的 API中文版中的解释BigInteger类所有已实现的接口: Serializable, Comparable<BigInteger>不可变的任意精度的整数。所有操作中,都以二进制补码形式表示 BigInteger(如 Java 的基本整数类型)。BigInteger 提供所有 Java 的基本整数操作符的对应物,并提供 java.lang.Math 的所有相关方法。另外,BigInteger 还提供以下运算:模算术、GCD 计算、质数测试、素数生成、位操作以及一些其他操作。 算术运算的语义完全模仿 Java 整数算术运算符的语义,如 The Java Language Specification 中所定义的。例如,以零作为除数的除法抛出 ArithmeticException,而负数除以正数的除法则产生一个负(或零)的余数。Spec 中关于溢出的细节都被忽略了,因为 BigIntegers 所设置的实际大小能适应操作结果的需要。 位移操作的语义扩展了 Java 的位移操作符的语义以允许产生负位移距离。带有负位移距离的右移操作会导致左移操作,反之亦然。忽略无符号的右位移运算符(>>>),因为该操作与由此类提供的“无穷大的词大小”抽象结合使用时毫无意义。 逐位逻辑运算的语义完全模仿 Java 的逐位整数运算符的语义。在执行操作之前,二进制运算符(and、or、xor)对两个操作数中的较短操作数隐式执行符号扩展。 比较操作执行有符号的整数比较,类似于 Java 的关系运算符和相等性运算符执行的比较。 提供的模算术操作用来计算余数、求幂和乘法可逆元。这些方法始终返回非负结果,范围在 0 和 (modulus - 1)(包括)之间。 位操作对其操作数的二进制补码表示形式的单个位进行操作。如有必要,操作数会通过扩展符号来包含指定的位。单一位操作不能产生与正在被操作的 BigInteger 符号不同的 BigInteger,因为它们仅仅影响单个位,并且此类提供的“无穷大词大小”抽象可保证在每个 BigInteger 前存在无穷多的“虚拟符号位”数。 为了简洁明了,在整个 BigInteger 方法的描述中都使用了伪代码。伪代码表达式 (i + j) 是“其值为 BigInteger i 加 BigInteger j 的 BigInteger”的简写。伪代码表达式 (i == j) 是“当且仅当 BigInteger i 表示与 BigInteger j 相同的值时,才为 true”的简写。可以类似地解释其他伪代码表达式。 当为任何输入参数传递 null 对象引用时,此类中的所有方法和构造方法都将抛出 NullPointerException。 以上的内容都知道啊,api写的很明显,但我问的是源代码里面的情况,具体的算法与思想 学习一下,原理太难看起来好像是维护了一个int[]数组,将序列分在数组里 现在看起来它是为了节约内存将大整数的补码分32位32位一截存在一个int数组里 API是慢慢看懂的,如果你一看就懂,那就没有必要再学这个了 这个问题后来弄懂了,也是很早以前了,今天突然看到所以想补充一下, java里的biginteger的数值是用int数组来存的,但十进制,而是相当于2的16次方进制,即每个数组元素相当于一个位。 初学者求助 Swing 一个开机服务问题 面试问题 double 数做乘法精度问题 JTable有没有清空的方法???? 哪位用过java的lex和yacc?请教哪个工具好? SQL Server2000的JDBC驱动 如何把Rational Rose设计好的Model以html的形式显示? 小菜鸟的小菜问题~ netbeans如何把生成的class文件存放到指的目录????? 关于界面变化的小问题,指点一下 初学者的一个小问题
在jdk的安装目录下有一个src.zip
Reinventing the wheel...
所有已实现的接口:
Serializable, Comparable<BigInteger>不可变的任意精度的整数。所有操作中,都以二进制补码形式表示 BigInteger(如 Java 的基本整数类型)。BigInteger 提供所有 Java 的基本整数操作符的对应物,并提供 java.lang.Math 的所有相关方法。另外,BigInteger 还提供以下运算:模算术、GCD 计算、质数测试、素数生成、位操作以及一些其他操作。 算术运算的语义完全模仿 Java 整数算术运算符的语义,如 The Java Language Specification 中所定义的。例如,以零作为除数的除法抛出 ArithmeticException,而负数除以正数的除法则产生一个负(或零)的余数。Spec 中关于溢出的细节都被忽略了,因为 BigIntegers 所设置的实际大小能适应操作结果的需要。 位移操作的语义扩展了 Java 的位移操作符的语义以允许产生负位移距离。带有负位移距离的右移操作会导致左移操作,反之亦然。忽略无符号的右位移运算符(>>>),因为该操作与由此类提供的“无穷大的词大小”抽象结合使用时毫无意义。 逐位逻辑运算的语义完全模仿 Java 的逐位整数运算符的语义。在执行操作之前,二进制运算符(and、or、xor)对两个操作数中的较短操作数隐式执行符号扩展。 比较操作执行有符号的整数比较,类似于 Java 的关系运算符和相等性运算符执行的比较。 提供的模算术操作用来计算余数、求幂和乘法可逆元。这些方法始终返回非负结果,范围在 0 和 (modulus - 1)(包括)之间。 位操作对其操作数的二进制补码表示形式的单个位进行操作。如有必要,操作数会通过扩展符号来包含指定的位。单一位操作不能产生与正在被操作的 BigInteger 符号不同的 BigInteger,因为它们仅仅影响单个位,并且此类提供的“无穷大词大小”抽象可保证在每个 BigInteger 前存在无穷多的“虚拟符号位”数。 为了简洁明了,在整个 BigInteger 方法的描述中都使用了伪代码。伪代码表达式 (i + j) 是“其值为 BigInteger i 加 BigInteger j 的 BigInteger”的简写。伪代码表达式 (i == j) 是“当且仅当 BigInteger i 表示与 BigInteger j 相同的值时,才为 true”的简写。可以类似地解释其他伪代码表达式。 当为任何输入参数传递 null 对象引用时,此类中的所有方法和构造方法都将抛出 NullPointerException。