因此,对于其原因typedef:ED原始数据类型是抽象低级别表示,并使其更容易理解(uint64_t而不是long long类型,这是8个字节).
但是,有uint_fast32_t与之相同typedef的uint32_t.使用"快速"版本会使程序更快吗?
ybu*_*ill 118
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.
也可以看看:
Naw*_*waz 34
不同之处在于它们的准确性和可用性.
这里的文件说:
无符号整数类型,宽度分别为8,16,32和64位(仅当实现直接支持该类型时提供):
Run Code Online (Sandbox Code Playgroud)uint8_t uint16_t uint32_t uint64_t
和
最快的无符号无符号整数类型,宽度分别至少为 8,16,32和64位
Run Code Online (Sandbox Code Playgroud)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为uint_fast32_t 如果它提供uint32_t.如果它没有提供uint32_t,则uint_fast32_t可以是任何类型的typedef,其至少具有32位.
当你#include inttypes.h在你的程序中时,你可以使用一系列不同的方式来表示整数。
uint_fast*_t 类型只是定义了表示给定位数的最快类型。
可以这样想:你定义了一个类型的变量,short并在程序中多次使用它,这是完全有效的。但是,您正在使用的系统可能会更快地使用 type 值int。通过将变量定义为 type uint_fast*t,计算机只需选择它可以使用的最有效的表示。
如果这些表示之间没有区别,则系统会选择它想要的任何一种,并始终一致地使用它。