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

时间:2013-05-10 23:01:58

标签: c gcc c99

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

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

2 个答案:

答案 0 :(得分:4)

你需要像GMP这样的东西:

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

答案 1 :(得分:2)

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

相关问题