什么是 uint_fast32_t,为什么要使用它来代替常规的 int 和 uint32_t?

新手上路,请多包涵

所以 typedef :ed 原始数据类型的原因是抽象低级表示并使其更容易理解( uint64_t 而不是 long long 类型,which7为 8 个字节)。

但是,有 uint_fast32_t 与 --- 具有相同的 typedef uint32_t 。使用“快速”版本会使程序更快吗?

原文由 Amumu 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 2.2k
2 个回答
  • int 在某些平台上可能小到 16 位。它可能不足以满足您的应用程序。
  • uint32_t 不保证存在。这是一个可选的 typedef 实现必须提供如果它具有正好 32 位的无符号整数类型。例如,有些有 9 位字节,所以它们没有 uint32_t
  • uint_fast32_t 清楚地说明了您的意图:从性能的角度来看,它是一种 至少 32 位的类型。 uint_fast32_t 实际上可能是 64 位长。这取决于实施。
  • 还有 uint_least32_t 在混合中。它指定至少 32 位长的 最小 类型,因此它可以小于 uint_fast32_t 。如果平台不支持后者,它是 uint32_t 的替代方案。

…有 uint_fast32_t uint32_t 相同的 typedef …

你看的不是标准。这是一个特定的实现(黑莓)。所以你不能从那里推断出 uint_fast32_t 总是与 uint32_t 相同。

也可以看看:

原文由 Yakov Galka 发布,翻译遵循 CC BY-SA 4.0 许可协议

不同之处在于它们的准确性和可用性。

这里的 文档 说:

宽度分别为 8、16、32 和 64 位的无符号整数类型( 仅在实现直接支持该类型时提供):

 uint8_t
uint16_t
uint32_t
uint64_t

最快的无符号无符号整数类型,宽度 分别至少 为 8、16、32 和 64 位

uint_fast8_t
uint_fast16_t
uint_fast32_t
uint_fast64_t

所以区别非常明显, uint32_t 是一个 正好32 位的类型,并且 只有当 它的类型 正好是 32 位时,一个实现才应该提供它,然后它可以typedef 该类型为 uint32_t 。这意味着, uint32_t 可能可用也可能不可 _用_。

另一方面, uint_fast32_t 是一个 至少有 32 位的类型,这也意味着,如果一个实现可以 typedef uint32_t as uint_fast32_t 如果 它提供 uint32_t 。如果它不提供 uint32_t ,那么 uint_fast32_t 可以是至少具有 32 位的任何类型的 typedef。

原文由 Nawaz 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题