我正在处理一些古老的 Delphi 代码,但遇到了一些我不太明白的事情。

[bla is set to 130245932]

outresult := ((bla * 1103516849) + 12359);

[outresult is equal to -413953101]

两个正数相乘是如何产生负数的?为什么当我从方程中取出 bla 变量并直接使用整数时(像这样)
outresult := ((130245932 * 1103516849) + 12359);

我什至在应用程序编译之前收到错误
[DCC Error] Unit1.pas(60): E2099 Overflow in conversion or arithmetic operation

一些天才将不胜感激。谢谢。

最佳答案

好的,我会回答这个问题。

错误信息应该很清楚。你在这里有一个整数溢出:

130245932 * 1103516849

因为 130245932 * 1103516849 = 143728580475708268 太大而无法放入 32 位整数。

10-08 05:18