【发布时间】:2014-11-26 09:11:26
【问题描述】:
我只是想知道,当 unsigned long 仍然可用时,为什么我们需要 uint64_t 实际上是 typedef of unsigned long 。是为了缩短名字还是其他原因?
【问题讨论】:
标签: c typedef type-conversion
我只是想知道,当 unsigned long 仍然可用时,为什么我们需要 uint64_t 实际上是 typedef of unsigned long 。是为了缩短名字还是其他原因?
【问题讨论】:
标签: c typedef type-conversion
原因应该很明显;这是64位精度的保证。 unsigned long 没有这样的保证。
在你的系统上它是一个typedef,仅仅意味着在你的系统上unsigned long是64位。一般情况下并非如此,但typedef 可以变化(由编译器实现者)以保证uint64_t。
【讨论】:
unsigned long 并不总是 typedef,因为unsigned long 并非普遍为 64 位宽。例如,在 x64 Windows 上,unsigned long 是 32 位,只有 unsigned long long 是 64 位。
【讨论】:
因为uint64_t 表示正好是64 位的类型,而unsigned long 可以是32 位或更高。
在 unsigned long 为 32 位的系统上,它将用于 typedef uint32_t ,而 unsigned long long 将用于 typedef uint64_t。
【讨论】:
是的,它确实使它更短,但这不是使用它的唯一原因。使用这种typedef-ed 数据类型的主要座右铭是使代码在各种平台上更加健壮和可移植。
有时,unsigned long 可能不是 64 位,但 uint64_t 的定义将始终保证 64 位精度。 uint64_t 的 typedef 可以 [ 读为 : will] 在不同的平台上有所不同,以达到 64 位的精度。
例子:
long 作为 32 位的系统,uint64_t 将 typedef 为 unsigned long long
long 作为 64 位的系统,uint64_t 将 typedef 到 unsigned long
【讨论】:
unsigned long今天已经不是 64 位的了,例如在 x64 Windows 上。
unsigned long 不是 64 位 很长时间...
不仅要使其更短,而且要使其更具描述性。
如果您在代码中看到uint64_t,则很容易将其解读为unsigned int of 64 bits data type。
【讨论】: