数字溢出问题
有这样一个问题,如果我有一个32位的整数,可是最大值超出了范围变成了负数,应该是溢出了。我如何把这个溢出的数字变成64位的正整数啊。
[解决办法]
if Value >= 0 then
Result := Value
else
Result := MaxInt - Value
[解决办法]
转换成long,或者更高的位数
[解决办法]
为何不直接用64位的类型啊int64就是,
[解决办法]
int64 i64;
i64 := DWORD(i); // i 即你已可能OF的整数
前提是OF不是太离普 至少不超过 DOWRD范围
[解决办法]
var i: integer; b: Cardinal;begin i:= 3247483648; // > 2147483647 b:= i; showmessage(inttostr(b));end;
[解决办法]
// 按你的最终结果为64位,代码改成下面. 或直接int64(b)var i: integer; b: Cardinal; c: int64;begin i:= 3247483648; // > 2147483647 b:= i; c:= b; showmessage(inttostr(c));end;//或者var i: integer; b: Cardinal;// c: int64;begin i:= 3247483648; // > 2147483647 b:= i;// c:= b; showmessage(inttostr(int64(b)));end;