【问题标题】:Difference between C-Types int32_t int_least32_t etcC 类型 int32_t int_least32_t 等之间的区别
【发布时间】:2013-12-04 11:01:43
【问题描述】:

我曾经读过 int32_t 正好是 32 位长,而 int_least32_t 至少只有 32 位,但它们在我的 stdint.h 中具有相同的 typedef:

typedef int  int_least32_t;

typedef int  int32_t;

那么区别在哪里呢?它们完全一样...

【问题讨论】:

  • SO 在您的系统上int 是至少 32 位的最佳类型 - 并且恰好是 32 位。所以一切都很好。
  • @glglgl 这里什么是“最好的”?
  • @Mauris 表示最短的。原则应该是“越短越长”。

标签: c types stdint


【解决方案1】:

int32_t 是有符号整数类型,宽度正好为 32 位,没有填充位,负值使用 2 的补码。 int_least32_t 是最小的有符号整数类型,宽度至少为 32 位。 仅当实现直接支持该类型时才提供这些。

您看到的 typedef 仅意味着在您的环境中,标准 int 类型本身满足了这两个要求。这并不意味着这些 typedef 在不同的环境中是相同的。

【讨论】:

    【解决方案2】:

    为什么你认为在另一台具有不同处理器、不同操作系统、不同版本的C 标准库的计算机上你会看到这个 typedef?

    这两种类型正是你写的。其中一种是 32 位的,另一种是至少 32 位的。因此,一种可能的情况是当它们都是 32 位时,在您的特定情况下,您会在 stdint.h 中看到它。在另一个系统上,您可能会看到它们是不同的。

    【讨论】:

    • 因为我认为如果我安装 gcc,我会得到相同的包含,并且我认为 stdlib 对于 x86 计算机上的 gcc 的每个 32 位分布都是相同的。为什么这些类型在其他机器上有所不同?我想如果我将一个 var 声明为 int 它正好是 32 位长。而且我一直认为它依赖于 gcc 构建“内置”类型的长度。
    • @Sebi2020 C 是跨平台的高级语言,它试图尽可能接近低级语言。因此该标准不提供基本类型的大小,并允许编译器的维护者为基本类型选择最佳表示。长话短说,它们只需要关系:|char|
    猜你喜欢
    • 2014-11-26
    • 2015-11-26
    • 2015-12-11
    • 2012-07-28
    • 1970-01-01
    • 2012-12-09
    • 2013-08-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多