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

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


当前回答

这是回答这个问题的一个很好的来源。

但这个问题是一种永远真实的回答:“是的。”两个。”

这取决于您的体系结构。如果您要在16位或更少的机器上工作,它不能是4字节(=32位)。如果您在32位或更好的机器上工作,则其长度为32位。

为了弄清楚,让你的程序准备输出一些可读的东西,并使用“sizeof”函数。返回您声明的数据类型的字节大小。但是要小心使用数组。

如果你声明int t[12];它将返回12*4字节。要得到这个数组的长度,只需使用sizeof(t)/sizeof(t[0])。 如果你要建立一个函数,它会计算发送数组的大小,记住If

typedef int array[12];
int function(array t){
    int size_of_t = sizeof(t)/sizeof(t[0]);
    return size_of_t;
}
void main(){
    array t = {1,1,1};  //remember: t= [1,1,1,0,...,0]
    int a = function(t);    //remember: sending t is just a pointer and equal to int* t
   print(a);   // output will be 1, since t will be interpreted as an int itselve. 
}

So this won't even return something different. If you define an array and try to get the length afterwards, use sizeof. If you send an array to a function, remember the send value is just a pointer on the first element. But in case one, you always knows, what size your array has. Case two can be figured out by defining two functions and miss some performance. Define function(array t) and define function2(array t, int size_of_t). Call "function(t)" measure the length by some copy-work and send the result to function2, where you can do whatever you want on variable array-sizes.

其他回答

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

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

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

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

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

唯一的保证是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,但它可能依赖于机器。

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)。