奇怪的Delphi整数乘法行为

NoP*_*God 4 delphi math

我正在研究一些古老的Delphi代码,我遇到了一些我不太了解的东西.

[bla is set to 130245932]

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

[outresult is equal to -413953101]
Run Code Online (Sandbox Code Playgroud)

如何将两个正数相乘得到负数?为什么当我将bla变量从等式中取出并直接使用整数时(就像这样)

outresult := ((130245932 * 1103516849) + 12359);
Run Code Online (Sandbox Code Playgroud)

在应用程序编译之前我收到错误

[DCC Error] Unit1.pas(60): E2099 Overflow in conversion or arithmetic operation
Run Code Online (Sandbox Code Playgroud)

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

Mys*_*ial 11

好吧,我会回答这个问题.

错误信息应该非常清楚.你有一个整数溢出:

130245932 * 1103516849
Run Code Online (Sandbox Code Playgroud)

因为130245932 * 1103516849 = 143728580475708268它太大而不适合32位整数.


Mas*_*ler 6

它基于内存在系统内部的表示方式.基本上,每个整数只有32位.对于有符号整数,一位用于符号; 这给你的值范围从负到正2 ^ 31(约20亿).如果超出该范围,系统就会崩溃.

如果您需要大整数,请尝试使用Int64而不是integer.如果您需要更大的整数,请查看DeHL中BigInteger类型.