【问题标题】:According to the C standard, what is the size of an int? [duplicate]根据 C 标准,int 的大小是多少? [复制]
【发布时间】:2021-08-07 17:52:31
【问题描述】:

我知道现在几乎所有的编译器都使用 4 个字节作为 int,但如果我没记错的话,并非总是这样。

我还知道,在 Intel 架构上,int 的大小始终与 CPU 相匹配。例如,在 8 位 CPU 上,int 是 8 位。

我的问题是,如果有的话,C 标准对 int 的大小有什么规定?

【问题讨论】:

  • 有几种 C 标准,以及几种理解它们的方法。先读n1570
  • 尝试在 16 位系统上编译 printf("%u",sizeof(int));,然后在 32 位和 64 位系统上编译 ... :)
  • "几乎所有编译器都使用 4 个字节作为 int" - 不正确。对于 64 位 Linux 目标,它是 8。“例如在 8 位 CPU 上,int 是 8 位。”也不正确 - 要求至少 16. 让charshortint 大小都一样是没有意义的。这个问题没有什么价值,因为你可以谷歌它。 en.wikipedia.org/wiki/C_data_types。该标准根据最小宽度/范围和相对大小来定义它们(例如,int 必须与short 一样宽或更宽)。
  • @Clifford 谢谢!我用谷歌搜索过,但没有找到
  • 你用什么搜索词? “c 数据类型大小” 似乎最明显。需要谷歌福

标签: c integer


【解决方案1】:

我的问题是,如果有的话,C 标准对 int 的大小有什么规定?

一个“普通”的 int 对象具有由 执行环境的架构(大到足以包含范围内的任何值 INT_MIN 到 INT_MAX,如标头 中所定义)。

它们的实现定义值的大小(绝对值)应等于或大于所示值,符号相同。

— int 类型对象的最小值 INT_MIN -32767 // -(2^15 - 1)

— int 类型对象的最大值 INT_MAX +32767 // 2^15 - 1

因此您不能在兼容的实现中使用 8 位 int

【讨论】:

    【解决方案2】:

    根据 C 标准 ISO/IEC 9899(最新为 2018 年),integer 的大小由实现定义。

    同样,char 的大小也是实现定义的——不一定是 8 位!

    【讨论】:

    • Nitpick:Sizeof char 始终为 1。您指的是 CHAR_BIT,它必须为 8 或更大。
    • “大小”之间有一个故意的空格;-)
    猜你喜欢
    • 2010-10-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-03
    • 2012-06-09
    • 2011-05-08
    • 1970-01-01
    相关资源
    最近更新 更多