任意精度有符号整数几乎总是使用符号-幅度表示法实现:
- (Java) OpenJDK中的BigInteger
- (Python) CPython中内置int类型的Bigint实现
- (C) GMP中的mpz_t,GNU多精度算术库
- (C++) 由Matt McCutchen编写的bigint库中的BigInteger
- (Rust) num-bigint库中的BigInt
我们知道为什么二进制补码在数学上起作用并具有优势的“教科书”原因。在我看来,这些原因同样适用于整数和BigIntegers。那么,这是否真的如此?当然,硬件定点整数和软件任意精度整数的设计约束存在巨大差异。从这个意义上说,看到设计者在这些不同领域中做出不同的权衡并不奇怪。那么,对于任意精度整数,符号-大小和二进制补码之间的权衡是什么?例如,这可以是某些重要算法的性能或简单性方面。我希望你的回答能阐明BigInteger算术所涉及的设计考虑,并帮助我从新的角度重新审视我对二进制补码的了解。(明确一点:当我说任意精度整数的二进制补码时,我的意思是使用一个字数组表示,其位模式组合在一起是所需数字的二进制补码表示形式,可能还需要满足“非必要的前导0”(对于非负数)或“非必要的前导1”(对于负数)的额外要求。)
int
类型无关。 - Mark Dickinson