//首先先知道 int 和 long long 最大值各为多少
printf("%d\n", INT_MAX); //输出2147483647
printf("%lld\n", INT64_MAX);//输出9223372036854775807
//开始定义
long long x = 2468 * 100000000; //原以为 = 246800000000 < long long最大值
printf("%lld\n", x); 结果输出-1894967296 明显溢出
问题出在哪里??
//打印 X 的内存空间
printf("%d\n", sizeof(x)); //输出 8 也没错
问题在于:
printf("%d\n", sizeof(2468)); //输出 4 int类型
printf("%d\n", sizeof(100000000)); //输出4 int类型
则 2468 * 100000000 也保存在 int中 导致溢出 溢出的结果赋值给x 也溢出
解决
long long a = 2468, b = 100000000;
long long x = a * b;
printf("%lld\n", x); 正常输出
本文通过实例详细解析了C语言中整型变量溢出的问题,特别是int和long long类型的处理差异。揭示了小于INT最大值的常数自动保存为INT类型,以及INT与INT相乘导致的溢出现象,最后提供了使用long long类型避免溢出的解决方案。
2万+

被折叠的 条评论
为什么被折叠?



