long的大小是机器字长,和操作系统有关系。我们常用的windows是32位操作系统,就是说4个字节,所以long就是4字节长,64位操作系统long就是8字节长。
short定死了就是两个字节长,int的定义是不短于short,不长于long,具体长度与编译器、机器都有关系。
一般,32位操作系统int就是4字节,64位操作系统int可能4字节,可能8字节,16位操作系统,int是2字节。
double是8字节长,long double不短于double,可能是8字节,也可能是12字节,同样不确定。
在32位机上,int通常是32位;在16位机上,int通常是16位(由编译器决定,而编译器通常是根据代码运行的目标机来决定)。
long int在上述两种机器上通常都是32位。
所以,int,long int,short int的宽度都可能随编译器而异。但有几条铁定的原则(ANSI/ISO制订的):
1 sizeof(short int)<=sizeof(int)
2 sizeof(int)<=sizeof(long int)
3 short int至少应为16位(2字节)
4 long int至少应为32位。
上述规则,任何编译器厂商必须遵守。
另外,你说的(-2147483648 -- 2147483648)范围有误,应该是(-2147483648 -- 2147483647)
long 的含义是范围不小于 不加long
同样 short 的含义是不大于 不加 short
所以是可以等于的,不同的编译器定义是不同的。