C语言中的整数变量占用2字节还是4字节?它取决于哪些因素?

大多数教科书都说整型变量占用2个字节。 但是当我运行一个程序打印一个整数数组的连续地址时,它显示了4的差值。


当前回答

没有具体的答案。这取决于平台。它是由实现定义的。它可以是2 4或者别的什么。

int背后的思想是,它应该与给定平台上的自然“字”大小相匹配:16位平台上的16位,32位平台上的32位,64位平台上的64位,你明白了吧。然而,出于向后兼容性的考虑,一些编译器更倾向于在64位平台上使用32位整型。

2字节int的时代已经一去不复返了(16位平台?),除非你正在使用一些16位字长的嵌入式平台。你的课本可能很旧了。

其他回答

这是C语言中最容易让人困惑的一点,但是C标准只指定了保证支持的整数类型的最小范围。Int保证能够容纳-32767到32767,这需要16位。在这种情况下,int是2字节。然而,实现可以自由地超越这个最小值,因为您将看到许多现代编译器将int设置为32位(这也意味着几乎无处不在的4字节)。

你书上说2字节的原因很可能是因为它很旧。曾几何时,这是常态。一般来说,如果您需要知道它在所使用的平台上有多少字节,则应该始终使用sizeof操作符。

为了解决这个问题,C99添加了新的类型,可以显式地要求指定大小的整数,例如int16_t或int32_t。在此之前,没有通用的方法来获取特定宽度的整数(尽管大多数平台在每个平台的基础上提供了类似的类型)。

唯一的保证是char类型必须至少是8位宽,short和int类型必须至少是16位宽,long类型必须至少是32位宽,并且sizeof (char) <= sizeof (short) <= sizeof (int) <= sizeof (long)(对于这些类型的unsigned版本也是如此)。

根据平台的不同,Int的宽度可以从16位到64位不等。

这取决于实现,但通常在x86和其他流行的架构,如ARM int占用4个字节。你总是可以在编译时使用sizeof(int)或任何你想检查的其他类型进行检查。

如果要确保使用特定大小的类型,请使用<stdint.h>中的类型

这主要取决于你使用的平台,取决于不同的编译器。现在在大多数编译器中,int是4字节。 如果你想检查你的编译器正在使用什么,你可以使用sizeof(int)。

main()
{
    printf("%d",sizeof(int));
    printf("%d",sizeof(short));
    printf("%d",sizeof(long));
}

c编译器唯一承诺的是short的大小必须等于或小于int, long的大小必须等于或大于int。因此,如果int的size是4,那么short的size可能是2或4,但不会大于它。long和int也是如此。上面还说长短不能一样。

C“int”的大小是2字节还是4字节? C语言中的整数变量占用2字节还是4字节?

C语言允许“字节”不是每“字节”8位。

CHAR_BIT非位域(字节)的最小对象的位数

大于8的值越来越少见。为了获得最大的可移植性,使用CHAR_BIT而不是8。在C语言中,以比特为单位的int的大小是sizeof(int) * CHAR_BIT。

#include <limits.h>
printf("(int) Bit size %zu\n", sizeof(int) * CHAR_BIT);

它取决于哪些因素?

int位大小通常为32或16位。C指定的最小范围:

int INT_MIN -32767类型对象的最小值 int INT_MAX +32767类型对象的最大值 C11dr§5.2.4.2.1

int的最小范围强制比特大小至少为16 -即使处理器是“8位”。在专门的处理器中可以看到64位这样的大小。其他的数值,如18、24、36等,在历史平台上出现过,或者至少在理论上是可能的。现代编码很少担心非2的整数次幂的比特大小。

计算机的处理器和体系结构驱动int位大小的选择。

然而,即使使用64位处理器,出于兼容性原因,编译器的int大小可能是32位的,因为大型代码库依赖于int是32位的(或32/16)。