Uint32和C++中的unsigned int有什么区别?

use*_*417 30 c++ types

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

Mat*_*lia 41

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).

  • 此外,一个是必须存在而不是另一个. (3认同)