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