3

C 标准和 C 编译器带有固定宽度的整数类型,例如uint8_t,int16_t等。

有没有办法在 C 中定义一个 128 位整数,它可以在代码中使用与现有固定宽度整数相同的语义?

4

2 回答 2

4

你需要像GMP这样的东西:

你不会得到“确切”的语义。

于 2013-05-10T23:05:40.620 回答
2

假设您正在编写 64 位机器,您可以将uint128_t类型定义为 a structof twouint64_t并仅手动实现您需要的算术运算符。如果操作在一个或另一个方向上溢出,您必须手动处理从低 64 位到高位的传送位,反之亦然。(例如,将 0xFFFFFFFF 添加到 0x00000001。)这将比将整个库用于 GMP 等任意大小的 bignum 轻得多。编写起来有点棘手,但绝不是不可能的——例如,当时 8 位计算机上的内置 BASIC 如何处理大于 255 的数字的数学。

于 2013-05-10T23:42:38.100 回答