long long int x;
x=958657431*100;
为了这
我得到答案=1376462588
为什么会发生这种情况,任何人都可以解释,而我在做 x=x*100 时得到正确答案;在下一行
long long int x;
x=958657431*100;
为了这
我得到答案=1376462588
为什么会发生这种情况,任何人都可以解释,而我在做 x=x*100 时得到正确答案;在下一行
如果您查看编译器警告,答案是显而易见的。
/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. 乘以 2int总是会产生 type 的结果int,即使它溢出。
一种解决方案是添加这样的类型后缀:
x = 958657431LL * 100;
或使用演员表
x = (long long)958657431 * 100;
笔记:
溢出有符号变量会导致未定义的行为,这意味着任何事情都可能发生,包括程序正常工作。
表达式958657431*100被评估为 a int,而不是 a long long int。
似乎在您的平台上, anint无法保持 value 95865743100。因此,您会得到其他东西。
采用
x = 958657431LL * 100;
让乘法long long int而不是int.