这两者是否相同?如果不相同:它们有什么区别? 如果是相同的,那么为什么需要这种类型?
uint32_t
(或者是早于C++11标准的编译器所使用的名称)保证是一个32位的无符号整数;unsigned int
则是编译器选择的最适合称为unsigned int
的无符号整数,只要它符合标准的要求(标准要求其最小范围为0-65535)。
与int
一样,unsigned int
通常是当前架构中易于操作的整数(通常适合于寄存器),因此在需要“正常”的快速整数时应使用它。
相反地,当您需要精确宽度的整数时,例如将其序列化到文件中或者需要该精确范围或依赖于无符号溢出恰好发生在2^32-1
时,就需要使用uint32_t
。
例如,在16位处理器上,unsigned int
通常为16位宽,而uint32_t
则必须为32位宽。
顺便提一下,如@Marc Glisse所指出的,尽管unsigned int
始终存在,但uint32_t
不是强制性的——特定的编译器实现可能不提供它。这主要是因为并非所有平台都可以轻松地提供这样的类型(通常是具有奇怪字长的DSPs)。
uint_least32_t
,然而是必须存在的。虽然不能直接访问硬件,但有助于满足最小宽度要求。 - DevSolar[0, 2^N-1]
范围,其中N >=16。 - MSaltersunsigned long int
也可以是64位的,而uint_least32_t
也保证“没有比指定宽度更小的无符号整数类型至少具有指定的宽度”。此外,_t
类型对其要求是明确的,而unsigned long
则不是。即使我在那之前写过C,但我认为在(C99)标准中存在了16年,这几乎就是“永远”。 - DevSolar