是否可以在C中创建自定义宽度整数?

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

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

你需要像GMP这样的东西:

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

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