gpt4 book ai didi

Delphi - 检测 Int64 溢出错误

转载 作者:行者123 更新时间:2023-12-03 15:55:04 30 4
gpt4 key购买 nike

在 Delphi 中如何检测 Int64 的溢出错误?

对于整数我们可以这样做:

type
MyInt = Integer; //Int64

function TryMaxTimes10(out Res: MyInt): boolean;
var
a, b: MyInt;
begin
{$Q+}
try
a := High(MyInt);
b := 10;
Res := a * b; //REF1
Result := True;
except
Result := False;
end;
{$Q-}
end;

对于 MyInt = Integer,第 REF1 行给出异常,因此 TryMaxTimes10 返回 false

但是如果我们将 MyInt 更改为 MyInt = Int64,那么 REF1 不会给出异常,并且 TryMaxTimes10 返回 true!

据我了解,{$Q+} 的帮助并未具体提及 Int64:... {$Q+} 状态、某些整数算术运算。 .. 检查是否溢出.

问题:所以我的问题是,我们如何检测 Int64 的溢出错误?

(我使用的是 Delphi 7。在较新版本的 Delphi 中是否也会发生同样的情况?)

最佳答案

这是一个已知问题。请参阅http://qc.embarcadero.com/wc/qcmain.aspx?d=10185 ,以及安迪在底部写的评论。

我的建议是创建一个函数(我没有编译也没有测试它 - 只是一个例子):

function Foo(A, B : Int64) : Int64;
var bNeg : boolean;
begin
// Do we expect a negative result?
bNeg := ((a < 0) xor (b < 0));
// Get the real result
Result := a * b;
// If the result is wrong, raise an error
if ((Result < 0) xor bNeg) then begin
// Raise EOverFlow
end;
end;

关于Delphi - 检测 Int64 溢出错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11344263/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com