所以 typedef
:ed 原始数据类型的原因是抽象低级表示并使其更容易理解( uint64_t
而不是 long long
类型,which7为 8 个字节)。
但是,有 uint_fast32_t
与 --- 具有相同的 typedef
uint32_t
。使用“快速”版本会使程序更快吗?
原文由 Amumu 发布,翻译遵循 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 许可协议
3 回答2k 阅读✓ 已解决
2 回答3.9k 阅读✓ 已解决
2 回答3.2k 阅读✓ 已解决
1 回答3.2k 阅读✓ 已解决
1 回答2.7k 阅读✓ 已解决
3 回答3.4k 阅读
1 回答1.6k 阅读✓ 已解决
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
相同。也可以看看:
标准委员会关心的异乎寻常的架构。
我对 C 和 C++ 中整数类型的务实意见。