【发布时间】:2013-02-01 10:30:54
【问题描述】:
是一样的吗?如果不是:有什么区别? 如果是,那为什么需要这种类型?
【问题讨论】:
是一样的吗?如果不是:有什么区别? 如果是,那为什么需要这种类型?
【问题讨论】:
uint32_t(或者 C++11 之前的编译器调用它)保证为 32 位无符号整数; unsigned int 是编译器最喜欢调用 unsigned int 的任何无符号整数,只要它符合标准的要求(要求它的最小范围为 0-65535)。
与int 一样,unsigned int 通常是一个在当前架构下可以快速操作的整数(通常它适合一个寄存器),因此当需要“正常”快速整数时使用它。
uint32_t,而是在您需要精确宽度整数时使用,例如序列化到文件,或者当您需要该确切范围或您依赖无符号溢出恰好在2^32-1 发生时。
例如,在 16 位处理器上,unsigned int 通常为 16 位宽,而uint32_t 将为 32 位宽。
顺便说一句,正如 @Marc Glisse 所指出的,虽然unsigned int 始终存在,但uint32_t 不是强制性的——特定的编译器实现可能不会提供它。这主要是因为并非所有平台都可以轻松提供这种类型(通常是字长奇怪的 DSP)。
【讨论】:
uint32_t 也用于需要精确位宽访问,例如写入硬件寄存器。
uint_least32_t,然而,是必须存在的。对直接硬件访问没有帮助,但对最小宽度要求有帮助。
[0, 2^N-1] 范围,以支持模 2^N 算术。