【问题标题】:What is the difference between an Uint32 and an unsigned int in C++?C++ 中的 Uint32 和 unsigned int 有什么区别?
【发布时间】:2013-02-01 10:30:54
【问题描述】:

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

【问题讨论】:

标签: c++ types


【解决方案1】:

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

【讨论】:

  • 另外,一个必须存在而不是另一个。
  • @user1511417:“先验”地问哪个更好是没有意义的 - 正如答案中所述,它们都有自己的用途。
  • uint32_t 也用于需要精确位宽访问,例如写入硬件寄存器。
  • uint_least32_t,然而,必须存在的。对直接硬件访问没有帮助,但对最小宽度要求有帮助。
  • “0-65535 最小范围”有点轻描淡写。它必须有一个 N >=16 的 [0, 2^N-1] 范围,以支持模 2^N 算术。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-07-11
  • 2011-12-12
  • 1970-01-01
  • 2017-09-10
  • 1970-01-01
  • 2011-01-19
  • 1970-01-01
相关资源
最近更新 更多