首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > .NET >

数字溢出有关问题

2012-10-30 
数字溢出问题有这样一个问题,如果我有一个32位的整数,可是最大值超出了范围变成了负数,应该是溢出了。我如

数字溢出问题
有这样一个问题,如果我有一个32位的整数,可是最大值超出了范围变成了负数,应该是溢出了。我如何把这个溢出的数字变成64位的正整数啊。

[解决办法]
if Value >= 0 then
Result := Value
else
Result := MaxInt - Value

[解决办法]
转换成long,或者更高的位数
[解决办法]
为何不直接用64位的类型啊int64就是,
[解决办法]
int64 i64;

 i64 := DWORD(i); // i 即你已可能OF的整数

前提是OF不是太离普 至少不超过 DOWRD范围
[解决办法]

探讨
为何不直接用64位的类型啊int64就是,

[解决办法]
补充:失去的数据是无没还原的.
[解决办法]
所以在未失去前,做好判断啊!

或者换大容量的变量方式
[解决办法]
Cardinal
[解决办法]
Delphi(Pascal) code
var  i: integer;  b: Cardinal;begin  i:= 3247483648;  // > 2147483647  b:= i;  showmessage(inttostr(b));end;
[解决办法]
Delphi(Pascal) code
// 按你的最终结果为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; 

热点排行