2013-05-10 38 views
1

C标准和C编译器配有固定宽度的整数类型,如uint8_tint16_t是否可以在C中创建自定义宽度的整数?

有用C限定一个128位的整数的方式,将使用相同的语义是在代码可用作为现有的固定宽度整数?

+3

没有操作符重载到C中的自定义类型,所以不是真的。您需要调用add(),subtract()等函数。 – 2013-05-10 23:07:27

+0

如果您想要的行为类似于内置类型,但实际上是具有自定义行为的特殊类型,那么最好使用C++对象。你可以很容易地用128位的标准整数类语义来创建一个C++对象。 – StilesCrisis 2013-05-10 23:08:52

+0

我正在研究纯C代码库。 – merlin2011 2013-05-10 23:10:34

回答

3

你需要像GMP:

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

+1

但是用C++你可以。 – 2013-05-10 23:07:35

1

假设你正在编写一个64位机器,你可以定义一个uint128_t类型为struct两个uint64_t s,并只实现你需要的算术运算符。在一个或另一个方向溢出的情况下,您必须手动处理从低64位到高位的携带位,反之亦然。 (例如,将0xFFFFFFFF加到0x00000001)。这比使用GMP等任意大小的标准库整个库要轻得多。举例来说,编写会有点棘手,但决不是不可能的 - 例如,当天8位计算机上的内置BASIC如何处理数字大于255的数字。

相关问题