在C中,
unsigned int size = 1024*1024*1024*2;
Run Code Online (Sandbox Code Playgroud)
这导致警告"表达式中的整数溢出......"而
unsigned int size = 2147483648;
Run Code Online (Sandbox Code Playgroud)
结果没有警告?
第一个表达式的正确值是否默认为int?它在C99规范中提到了哪里?
250*_*501 11
当使用没有任何后缀的十进制常量时,十进制常量的类型是第一个可以按顺序表示的(当前C标准,6.4.4常量p5):
第一个表达式的类型是int,因为值为1024和2的每个常量都可以表示为int.这些常量的计算将在int类型中完成,结果将溢出.
假设INT_MAX等于2147483647且LONG_MAX大于2147483647,则第二个表达式的类型为long int,因为此值不能表示为int,但可以为long int.如果INT_MAX等于LONG_MAX等于2147483647,则类型为long long int.