为什么以下代码没有给出所需的答案?

Vad*_*klk 3 c c++ int

昨天接受采访时,面试官问我一个问题:

为什么以下代码没有给出所需的答案?

int a = 100000, b = 100000;

long int c = a * b ;
Run Code Online (Sandbox Code Playgroud)

语言是C.

我已经告诉采访者我们首先计算100,000*100,000作为int(溢出),然后将其投入很长时间.

The*_*GiG 5

这是因为它首先将它计算为一个int,然后才将其转换为一个long变量.(因此它首先作为一个整数溢出,然后变成一个long)代码应该是

long int c = a*(long int)b;
Run Code Online (Sandbox Code Playgroud)

  • 它很可能仍会给出正确答案.问题是错误的; 它应该是"为什么你会抬起你的眼睛";) (2认同)

Ste*_*ris 5

我猜测线索会发生整数溢出,但是如果值很低,我看不到这种情况.

int的最大(正)值(通常为32位)为:2,147,483,647

您的计算结果是:100,000,000

更新:

使用您更新的问题:100000 * 100000而不是10,000,000,00010000 * 10000结果,这导致溢出.然后将该值转换为很长时间.

为了防止这种溢出,正确的方法是将乘法中的两个值之一转换为long(通常为64位).例如(long)100000 * 100000