C语言中的整数变量占用2字节还是4字节?它取决于哪些因素?
大多数教科书都说整型变量占用2个字节。 但是当我运行一个程序打印一个整数数组的连续地址时,它显示了4的差值。
C语言中的整数变量占用2字节还是4字节?它取决于哪些因素?
大多数教科书都说整型变量占用2个字节。 但是当我运行一个程序打印一个整数数组的连续地址时,它显示了4的差值。
当前回答
这是C语言中最容易让人困惑的一点,但是C标准只指定了保证支持的整数类型的最小范围。Int保证能够容纳-32767到32767,这需要16位。在这种情况下,int是2字节。然而,实现可以自由地超越这个最小值,因为您将看到许多现代编译器将int设置为32位(这也意味着几乎无处不在的4字节)。
你书上说2字节的原因很可能是因为它很旧。曾几何时,这是常态。一般来说,如果您需要知道它在所使用的平台上有多少字节,则应该始终使用sizeof操作符。
为了解决这个问题,C99添加了新的类型,可以显式地要求指定大小的整数,例如int16_t或int32_t。在此之前,没有通用的方法来获取特定宽度的整数(尽管大多数平台在每个平台的基础上提供了类似的类型)。
其他回答
我知道它等于sizeof(int)int的大小实际上取决于编译器。在处理器是16位的时候,一个int是2字节。现在,在32位和64位系统上,它通常是4个字节。
不过,使用sizeof(int)是获得执行程序的特定系统的整数大小的最佳方法。
编辑:修正了在大多数64位系统上int为8字节的错误语句。例如,它在64位GCC上是4字节。
这个问题的答案取决于您使用的平台。 但无论平台如何,你都可以可靠地假设以下类型:
[8-bit] signed char: -127 to 127
[8-bit] unsigned char: 0 to 255
[16-bit]signed short: -32767 to 32767
[16-bit]unsigned short: 0 to 65535
[32-bit]signed long: -2147483647 to 2147483647
[32-bit]unsigned long: 0 to 4294967295
[64-bit]signed long long: -9223372036854775807 to 9223372036854775807
[64-bit]unsigned long long: 0 to 18446744073709551615
#include <stdio.h>
int main(void) {
printf("size of int: %d", (int)sizeof(int));
return 0;
}
这个返回4,但它可能依赖于机器。
这主要取决于你使用的平台,取决于不同的编译器。现在在大多数编译器中,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)。