【问题标题】:why we require uint64_t when unsigned long is available ? [duplicate]为什么当 unsigned long 可用时我们需要 uint64_t ? [复制]
【发布时间】:2014-11-26 09:11:26
【问题描述】:

我只是想知道,当 unsigned long 仍然可用时,为什么我们需要 uint64_t 实际上是 typedef of unsigned long 。是为了缩短名字还是其他原因?

【问题讨论】:

    标签: c typedef type-conversion


    【解决方案1】:

    原因应该很明显;这是64位精度的保证。 unsigned long 没有这样的保证。

    你的系统上它是一个typedef,仅仅意味着在你的系统上unsigned long是64位。一般情况下并非如此,但typedef 可以变化(由编译器实现者)以保证uint64_t

    【讨论】:

      【解决方案2】:

      unsigned long 并不总是 typedef,因为unsigned long 并非普遍为 64 位宽。例如,在 x64 Windows 上,unsigned long 是 32 位,只有 unsigned long long 是 64 位。

      【讨论】:

        【解决方案3】:

        因为uint64_t 表示正好是64 位的类型,而unsigned long 可以是32 位或更高。

        在 unsigned long 为 32 位的系统上,它将用于 typedef uint32_t ,而 unsigned long long 将用于 typedef uint64_t

        【讨论】:

          【解决方案4】:

          是的,它确实使它更短,但这不是使用它的唯一原因。使用这种typedef-ed 数据类型的主要座右铭是使代码在各种平台上更加健壮和可移植。

          有时,unsigned long 可能不是 64 位,但 uint64_t 的定义将始终保证 64 位精度。 uint64_t 的 typedef 可以 [ 读为 : will] 在不同的平台上有所不同,以达到 64 位的精度。

          例子:

          1. 对于具有long 作为 32 位的系统,uint64_t 将 typedef 为 unsigned long long
          2. 对于具有long 作为 64 位的系统,uint64_t 将 typedef 到 unsigned long

          【讨论】:

          • unsigned long今天已经不是 64 位的了,例如在 x64 Windows 上。
          • 其实unsigned long 不是 64 位 很长时间...
          【解决方案5】:

          不仅要使其更短,而且要使其更具描述性。

          如果您在代码中看到uint64_t,则很容易将其解读为unsigned int of 64 bits data type

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2015-08-27
            • 1970-01-01
            • 1970-01-01
            • 2020-09-26
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多