//首先先知道 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); 正常输出