person.groups.all()[0]#->correct predictable result
为此
我正在回答= 1376462588
为什么发生这种情况,谁能解释,而我在做x = x * 100时得到正确答案;在下一行
答案 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
上进行的乘法。