Answers:
int在某些平台上可能只有16位。对于您的应用程序可能还不够。uint32_t不保证存在。如果typedef实现具有正好为32位的无符号整数类型,则实现必须提供此选项。例如,有些具有9位字节,因此没有uint32_t。uint_fast32_t清楚说明您的意图:从性能的角度来看,这是至少 32位的类型,这是最好的。uint_fast32_t实际上可能是64位长。这取决于实现。...
uint_fast32_t具有与uint32_t... 相同的typedef
您正在寻找的不是标准。这是一个特殊的实现(BlackBerry)。因此,您无法从那里推论出uint_fast32_t总是与相同的推论uint32_t。
也可以看看:
uint_least32_t,uint_fast32_t除了它偏爱较小的存储而不是速度之外,这是相同的。
区别在于它们的准确性和可用性。
这里的文档说:
无符号整数类型,其宽度分别恰好为8、16、32和64位(仅在实现直接支持type时提供):
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位的类型时才应提供它,然后可以将该类型的类型定义为uint32_t。这意味着,uint32_t可能会或可能不会使用。
在另一方面,uint_fast32_t是具有类型至少 32位,这也意味着,如果一个实施方式可以的typedef uint32_t为uint_fast32_t 如果它提供uint32_t。如果不提供uint32_t,则uint_fast32_t可以是至少具有32位的任何类型的typedef 。
uint32_t在所有系统上都是32位(如果存在),与拥有64位的系统相比可能并不快。 uint_fast32_t另一方面,至少 32位甚至可以是64位。
uint16_t x;将其存储在ARM7-TDMI的32位寄存器中,则代码x++;可能需要评估为x=((x+1)<<16)>>16);。在用于该平台的编译器上,uint_fast16_t很可能将其定义为与之uint32_t避免的同义词。
[u]int_(fast|least)N_t还不可选?当然,不是标准要求所有架构都支持至少64位的原始类型吗?然而,措辞stdint.h暗示他们必须这样做。对我来说,我们一直在强制执行自1999年以来,即64位计算成为主流之前的几年-不用说落后于嵌入式体系结构(在许多情况下仍是当前)的滞后。对我来说,这似乎是一个很大的疏忽。
当你#include inttypes.h在你的程序,你可以访问一堆为代表的整数不同的方式。
uint_fast * _t类型仅定义用于表示给定位数的最快类型。
这样考虑:定义一个类型变量,short并在程序中多次使用它,这是完全有效的。但是,您正在使用的系统使用type值可能会更快地工作int。通过将变量定义为type uint_fast*t,计算机可以简单地选择可以使用的最有效的表示形式。
如果这些表示之间没有区别,则系统选择所需的任何一种,并在整个过程中始终使用。