1,常用数据类型及所占大小
short、int、long、char、float、double 这六个关键字代表C 语言里的六种基本数据类型。
在32 位的系统上short 内存大小是2 个byte;
int的内存大小是4 个byte;
long 的内存大小是4 个byte;
float 的内存大小是4 个byte;
double 的内存大小是8 个byte;
char 的内存大小是1 个byte。
(注意,可能不同的平台还会有所不同,具体平台可以用sizeof 关键字测试一下)
2,long 和 int 的区别?
下面的话选自《C程序设计语言》:
short与long两个限定符的引入可以为我们提供满足实际需要的不同长度的整形数。int通常代表特定机器中证书的自然长度。short类型通常为16位,long类型通常为32位,int类型可以为16位或32位。各编译器可以根据硬件特性自主选择合适的类型长度,但要遵循下列限制:short与int类型至少为16位,long类型至少为32位,并且short类型不得长于int类型,而int类型不得长于long类型。
下面一段话选自《C++ Primer》:
short、int和long类型都表示整型值,存储空间的大小不同。一般,short类型为半个机器字长(word)长,int类型为一个机器字长,而long类型为一个或两个机器字长(在32位机器中int类型和long类型通常字长是相同的)。
从表中可以看出这么几个问题,int类型在64位系统下竟然是4个字节32位的。还有,这些玩意儿到底跟什么有关系?是谁在控制着?从网上扒了各种解释,大概有这么两点:
1、64位系统下,编译器为了向前兼容,将int类型自动编译为4个字节的了;
2、这些个玩意儿就是编译器来控制的,不同的编译器将int类型编译成不同长度的,所以,使用什么编译器才是重要的,比如:32位系统,tc下的int就是16位长度的,VC就是32位长度的。
3、long long是标准的8 bytes,不受编译器限制,所以,16位的依然也是8 bytes。
参考文献:http://blog.sina.com.cn/s/blog_6f62c9510101svjz.html