C 标准和 C 编译器带有固定宽度的整数类型,例如uint8_t
,int16_t
等。
有没有办法在 C 中定义一个 128 位整数,它可以在代码中使用与现有固定宽度整数相同的语义?
假设您正在编写 64 位机器,您可以将uint128_t
类型定义为 a struct
of twouint64_t
并仅手动实现您需要的算术运算符。如果操作在一个或另一个方向上溢出,您必须手动处理从低 64 位到高位的传送位,反之亦然。(例如,将 0xFFFFFFFF 添加到 0x00000001。)这将比将整个库用于 GMP 等任意大小的 bignum 轻得多。编写起来有点棘手,但绝不是不可能的——例如,当时 8 位计算机上的内置 BASIC 如何处理大于 255 的数字的数学。