C++如何确定常量的类型

wbczyh 2015-10-26

程序的声明将特定的整型变量的类型告诉了C++编译器,但编译器是如何知道常量类型的呢?假设在程序中使用常量来表示一个数字:

Cout<<"year="<<1492<<"\n";

程序将把1492储存为int,long还是其他整型呢?答案是,除非有理由存储为其他类型(如使用了特殊的后缀来表示特定的类型,或者是太大,不能存储为int),否则c++将整型常量存储为int类型。

首先来看看后缀。后缀是放在数字常量后面的字母,用于表示类型。整数后面的l或L后缀表示该整数为long常量,u或U后缀表示unsigned int常量,ul(可以采用任何一种顺序,大写小写均可)表示unsigned long常量(由于小写l看上去像1,因此应使用大写L作后缀)。例如,在int为16位、long为32位的系统上,数字22022被存储为int,占16位,数字22022L被存储为long,占32位。同样,22022LU和22022UL都被存储为unsigned long。

接下来考察长度。在c++中,对十进制整数采用的规则,与十六进制和八进制稍微有些不同。对于不带后缀的十进制整数,将使用下面几种类型中能够存储该数的最小类型来表示:int、long或unsigned long。在int为16位,long为32位的计算机系统上,20000被表示int类型,40000被表示为long类型,3000000000被表示为unsigned long类型。对于不带后缀的十六进制或八进制整数,将使用下面几种类型中能够存储该数的最小类型来表示int、unsigned int、long或unsigned long。在将40000表示为long的计算机系统中,十六进制数0x9C40(40000)将被表示为unsigned int。这是因为十六进制常用来表示内存地址,而内存地址是没有符号的,因此,unsigned int比long更适合用来表示16位的地址。

相关推荐