求解这段话的意思……
“通常,在程序代码中使用2645这样的数字时,它以int类型存储。当使用1000000这样的数字int类型不能表示时,编译器会视为long int类型(假定这种类型可以表示该数字)。如果数字大于long类型的最大值,c会视为unsigned long类型,如果仍然不够,c会视其为long long类型或者unsigned long long 类型(如果有这样的类型的话)”
问:“当使用1000000这样的数字int类型不能表示时”中 不能表示 是什么意思?是指溢出现象吗?
如果是溢出,那编译器又怎么将其视为long int类型?
多谢高手赐教……
[解决办法]
1000000是一个字面值常量,是你输入到文件里面让编译器编译的。
按理讲,一个整数字面值常量可以是int, long int或者是long long int类型的。
例如 2是int类型, 2L是long int, 2LL是long long int。
但是这样太麻烦了,例如你要写100000,如果假设100000对int会溢出的话,只有写成1000000L才正确,这样太麻烦了,你不得不提前计算1000000是int是long还是long long。
所以,c或者c++中,如果一个整数字面值常量,例如100000,如果缺省的类型会溢出,编译器会自动升级到下一级别的整数类型。
所以当你写 int a = 1000000的时候,假设1000000对int溢出,编译器会先把1000000当成1000000L这样的一个long int字面值常量,然后再复制给a (溢出)。
所以1000000000L也不一定就是一个long int字面值常量。如果对long溢出的话,编译器会把他当成long long int的字面值常量。