首先,我们要理解“位”,“字节”,“字”(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取值。