【问题标题】:Is it possible to create custom-width integers in C?是否可以在 C 中创建自定义宽度的整数?
【发布时间】:2013-05-10 23:01:58
【问题描述】:

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

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

【问题讨论】:

  • 没有运算符重载到 C 中的自定义类型,所以不是真的。您将需要调用 add()、subtract() 等函数。
  • 如果您想要一些行为类似于内置类型但实际上是具有自定义行为的特殊类型,您最好使用 C++ 对象。您可以轻松地创建一个具有标准整数类语义且在 128 位中工作的 C++ 对象。
  • 我正在开发纯 C 代码库。
  • 您可能想检查您的 GCC 编译器是否支持 __int128_t__uint128_t。见How to print uint128_t number using GCC

标签: c gcc c99


【解决方案1】:

你需要像 GMP 这样的东西:

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

【讨论】:

    【解决方案2】:

    假设您正在对 64 位机器进行编程,您可以将 uint128_t 类型定义为两个 uint64_ts 的 struct,并仅手动实现您需要的算术运算符。如果操作在一个或另一个方向上溢出,您必须手动处理从低 64 位到高位的传送位,反之亦然。 (例如,将 0xFFFFFFFF 添加到 0x00000001。)这将比将整个库用于 GMP 等任意大小的 bignum 轻得多。编写起来有点棘手,但绝不是不可能的——这几乎就是当时 8 位计算机上的内置 BASIC 处理大于 255 数字的数学的方式。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-12-10
      • 2021-12-26
      • 1970-01-01
      • 1970-01-01
      • 2016-09-27
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多