45

是一样的吗?如果不是:有什么区别?如果是,那么为什么需要这种类型?

4

1 回答 1

61

uint32_t(或者 C++11 之前的编译器调用它)保证是 32 位无符号整数;unsigned int是编译器最喜欢调用的无符号整数unsigned int,只要它符合标准的要求(要求它的最小范围为 0-65535)。

比如intunsigned int通常是一个在当前架构下可以快速操作的整数(通常它适合一个寄存器),所以当需要一个“正常”的快速整数时使用它。

uint32_t相反,当您需要一个精确宽度的整数时使用,例如序列化到文件,或者当您需要该精确范围或您依赖无符号溢出恰好发生在2^32-1.

例如,在 16 位处理器unsigned int上通常是 16 位宽,而必须uint32_t是32 位宽。


顺便说一句,正如@Marc Glisse所指出的,虽然unsigned int总是存在,uint32_t但不是强制性的——特定的编译器实现可能不会提供它。这主要是因为并非所有平台都可以轻松提供这种类型(通常是字长奇怪的 DSP)。

于 2013-02-16T15:23:09.393 回答