与 uint32_t 有什么区别
uint_fast32_t
是至少 32 位的无符号类型,它是(以某种一般方式)最快的此类类型。“快速”意味着给定一个选择,实现者可能会选择架构具有算术、加载和存储指令的大小。它不是任何特定基准的赢家。
uint_least32_t
是至少 32 位的最小无符号类型。
uint32_t
是没有填充的正好 32 位的类型,如果存在任何此类类型的话。
我对吗?
不。如果uint24_t
存在,那么它是整数类型,而不是struct
. 如果此实现中没有 24 位的无符号整数类型,则它不存在。
由于unsigned long
要求至少为 32 位,因此唯一uint24_t
可能成为别名的标准类型是char
、unsigned char
和. 或者,它可以是扩展类型(即,由实现提供的整数类型,不是标准中定义的任何整数类型)。unsigned short
unsigned int
你会建议我将 uint48_t 用于我的 48 位无符号整数吗?
如果它存在并且是您想要的大小,那么您不妨使用它。但是,它不会在很多实现中存在,因此它只适用于不可移植的代码。没关系,前提是您必须处理精确的 48 位整数的原因是特定于平台的。
确切的 16、32 和 64 位类型在技术上也是可选的,但如果实现具有合适的整数类型,则它们必须存在。“合适”不仅意味着有一个精确的 N 位无符号类型没有填充位,而且对应的有符号类型没有填充位并使用 2 的补码表示。实际上,这几乎无处不在,以至于您通过使用其中任何一个都很少限制可移植性。尽管您应该使用uint_least32_t
或uint_fast32_t
优先使用uint32_t
. 哪一个取决于您是否更关心速度或大小。根据我的经验,很少有人会打扰,因为没有 32 位整数类型的平台已经很奇怪,以至于大多数人都不关心他们的代码是否在上面运行。