关于C++中的修饰符long

来源:百度知道 编辑:UC知道 时间:2024/05/21 12:40:21
为什么long int和int占得字节数一样(4字节),而且取值范围也一样(-2147483648 -- 2147483648)?
同样double和long double也是一般大。(8字节,1.7*10^-308 -- 1.7*10^308)

这是为什么?不应该用long修饰后取值范围变大么?

问题出处:C++语言程序设计(第三版),(郑莉,董渊,张瑞丰 编著)清华大学出版社 书中的第24页。

在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

所以是可以等于的,不同的编译器定义是不同的。

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字节,同样不确定。