首先,我们要理解“位”,“字节”,“字”(word),这三个的意思。
一个机器语言里的0或1。
字节(byte),8个位(bit)就是一个字节,所以1字节=8位,4字节就是32位。
字(word)的长度跟计算机性能有关,如16位的计算机,它的字长度就是2个字节,32位的计算机,字长就是4个字节。
一般情况:
1、int通常代表特定机器中证书的自然长度。
2、long long 类型为64位,long类型位32位,short类型为16位,int类型为16位或32位。
3、原则上这四种类型代表4个不同大小的数值。
4、各编译器可以根据硬件特性自主选择合适的类型长度,但要遵循下列限制:short与int类型至少为16位,long类型至少为32位,并且short类型不得长于int类型,而int类型不得长于long类型。
参看上面字的长度解释。
类型 | 16位系统/字节 | 32位系统/字节 | 64位系统/字节 |
char | 1 | 1 | 1 |
char* | 2 | 4 | 8 |
short | 2 | 2 | 2 |
int | 2 | 4 | 4 |
long | 4 | 4 | 8 |
long long | 8 | 8 | 8 |
从表中可以看出这么几个问题,int类型在64位系统下竟然是4个字节32位的。还有,这些玩意儿到底跟什么有关系?是谁在控制着?从网上扒了各种解释,大概有这么两点:
1、64位系统下,编译器为了向前兼容,将int类型自动编译为4个字节的了;
2、这些个玩意儿就是编译器来控制的,不同的编译器将int类型编译成不同长度的,所以,使用什么编译器才是重要的,比如:32位系统,tc下的int就是16位长度的,VC就是32位长度的。如果你的系统是64,那么编译器软件默认安装路径有Program File(x86),它就是32位的编译器。
3、long long是标准的8 bytes,不受编译器限制,所以,16位的依然也是8 bytes。
4、我们在使用整型变量的时候还是得小心的,尤其需要其所占空间长度的时候,千万不要想当然的认为int在32位系统下就是4个字节。尽量使用sizeof取值。