为什么这在C中显示错误答案

时间:2019-02-22 17:15:55

标签: c

person.groups.all()[0]#->correct predictable result

为此

我正在回答= 1376462588

为什么发生这种情况,谁能解释,而我在做x = x * 100时得到正确答案;在下一行

2 个答案:

答案 0 :(得分:5)

如果您查看编译器警告,答案是显而易见的。

/tmp$ gcc main.c 
main.c: In function ‘main’:
main.c:4:16: warning: integer overflow in expression of type ‘int’ results in ‘1376462588’ [-Woverflow]
     x=958657431*100;
                ^

当您以x = expr格式进行作业时,对expr的评估完全不知道x的类型。即使两个int相乘,即使溢出,也始终会得到类型为int的结果。

一种解决方案是添加如下所示的类型后缀:

x = 958657431LL * 100;

或使用演员表

x = (long long)958657431 * 100;

注意:

使 signed 变量溢出会导致未定义的行为,这意味着可能发生任何事情,包括程序正常运行。

答案 1 :(得分:2)

表达式958657431*100的计算结果是int,而不是long long int

似乎在您的平台上,int无法保存值95865743100。因此,您得到了其他东西。

使用

x = 958657431LL * 100;

获取要在long long int而不是int上进行的乘法。

相关问题