【问题标题】:size of int and long is equal to 4 bytes [duplicate]int 和 long 的大小等于 4 个字节 [重复]
【发布时间】:2021-10-16 17:53:50
【问题描述】:

我正在通过编码检查 short 、 int 和 long 的大小。我的期望是所有数据类型修饰符的大小都会有所不同。令人惊讶的是,long 和 int 的大小是相同的,都是 4 字节。我已经提供了代码和输出。我正在使用 64 位 Windows 操作系统和 gcc 编译器(从 https://www.msys2.org 下载)。 我不得不尝试寻找它背后的原因,但不幸的是我无法理解或原因有点模糊。

#include <stdio.h>

int main()
{
 printf("Size of short is %d",sizeof(short));
 printf("\nSize of int  is %d",sizeof(int));
 printf("\nSize of long  is %d",sizeof(long));
}

输出:


Size of short is 2
Size of int  is 4
Size of long  is 4

【问题讨论】:

  • 字体大小取决于平台。我在我的 linux 上得到了sizeof(long) == 8(与long long 的大小相同)。
  • “我的期望是所有数据类型修饰符的大小都会不同”。这是完全没有根据的。
  • 正确且非常具体的原因是“历史上就是这样发生的”。
  • %zu 是 size_t 类型值的正确 printf 格式字符串,而不是 %d
  • 现在通常最好使用#include &lt;stdint.h&gt; 并使用那里的类型(例如,int32_tuint64_tint_least32_tint_fast16_t 等)。

标签: c


【解决方案1】:

整数的大小完全取决于您正在使用的系统或机器。例如,在我的计算机中 sizeof(int)==4,然后 sizeof(short)==2 和 sizeof(long)==8。但是,这始终不能保证,唯一可以保证的是:

sizeof(short)

因此,您的整数的大小可能具有相同的值,也可能是 short 和 int 或 int 和 long 彼此相等,或者全部不是相同的值。这完全取决于您正在使用的系统。

【讨论】:

  • 系统如何确定 4 个字节只用于 long 而不是其他大小?
  • @noviceprogrammer:C 标准规定char(有符号)必须能够表示至少范围-127..127,所以它必须是至少 8位宽。 shortint 必须能够至少表示-32767..32767 的范围,这意味着它们必须至少 16 位宽。 long 必须能够表示-2147483647..2147483647 范围,因此它必须至少 32 位宽。这些是最小范围,实现可以定义类型来存储更广泛的范围。
  • @noviceprogrammer:C 是 1970 年代早期的产物,当时系统的字长不统一,因此它没有规定特定的大小,只规定必须能够表示的类型。
猜你喜欢
  • 2016-06-21
  • 2012-11-04
  • 2019-12-12
  • 1970-01-01
  • 2023-03-10
  • 1970-01-01
  • 2014-11-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多