C标准和C编译器带有固定宽度的整数类型,例如uint8_t
,int16_t
等。
有没有办法在C中定义一个128位整数,它可以在代码中使用与现有固定宽度整数相同的语义?
答案 0 :(得分:4)
答案 1 :(得分:2)
假设您正在编程64位计算机,您可以将uint128_t
类型定义为两个struct
的{{1}},并且只需手动实现您需要的算术运算符。如果操作在一个方向或另一个方向上溢出,则必须手动处理从低64位到高位的传输位,反之亦然。 (例如,将0xFFFFFFFF添加到0x00000001。)这比使用像GMP这样的任意大小的bignums的整个库要轻得多。编写它有点棘手,但绝不是不可能的 - 例如,当天在8位计算机上的内置BASIC处理数字大于255的数学就是如此。