在网络上常常看到有朋友问“int占几个字节呀?”,其实这个问题就好比在问“车有几个轮子呀?”,如果提问的人不说明车子的类型那么这个问题就没有标准答案了,因为车有可能是自行车、汽车,还有可能是火车。对于int来说也是一个道理,要想知道int占用几个字节最简单的办法就是实际测试一下,请看图000-00:
我们把这段代码敲进计算机,然后分别使用Turbo
C(一下简称TC)、VC6.0和GCC对这段代码进行编译执行,然后观察输出结果,请看图000-01、000-02、000-03:
我们会发现TC告诉我们int占用2个字节,而VC和GCC告诉我们int占用4个字节。我们在同一台机器上编译同一段代码,而不同的编译器输出了不同的执行结果,那么它们仨人到底谁说的是真话呢?
我猜它们说的都是真话,因为从来没人规定int应该占用几个字节,那么编译器只好自己说了算。
TC说:只要在我这编译那么int就占2个字节。
VC和GCC说:只要在我这编译那么int就占4个字节。
TC又说了:如果在我这使用int类型变量,那么它能表达的范围是[-(2^15-1), 2^15],出了这个范围就要当心了。
VC和GCC对着TC不屑的说:int在我们这能表示的范围可不止这么小,我们的表达范围是[-(2^32-1),
2^31],怎么样够厉害的吧。
所以我们在使用不同编译器时候需要注意他们的数据类型差异,int如此其他数据类型也应当注意,因为并没用人规定某种数据类型应该占据多少字节,以及他所表示的数据是有符号还是无符号,即便有人规定这些内容那么编译器是否愿意按规定来实现谁也说不准。以后我们还会介绍一些由于数据类型差异引发的程序异常。
好了先总结一下这次我们所掌握的信息:
1.
C语言具有较好的移植性,同一份代码可以在不同的编译器上进行编译;
2. 编译没有出错的程序不表示执行也正确;
3.
int到底占用几个字节谁也说不准,就像车应该有几个轮子一个道理,需要根据实际情况而定,对int来说主要还是看编译器本身怎么定义;