我正在处理一些古老的 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 位整数。