-4
long long int x;
 x=958657431*100;

为了这

我得到答案=1376462588

为什么会发生这种情况,任何人都可以解释,而我在做 x=x*100 时得到正确答案;在下一行

4

2 回答 2

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. 乘以 2int总是会产生 type 的结果int,即使它溢出。

一种解决方案是添加这样的类型后缀:

x = 958657431LL * 100;

或使用演员表

x = (long long)958657431 * 100;

笔记:

溢出有符号变量会导致未定义的行为,这意味着任何事情都可能发生,包括程序正常工作。

于 2019-02-22T17:19:33.967 回答
2

表达式958657431*100被评估为 a int,而不是 a long long int

似乎在您的平台上, anint无法保持 value 95865743100。因此,您会得到其他东西。

采用

x = 958657431LL * 100;

让乘法long long int而不是int.

于 2019-02-22T17:21:27.083 回答