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

解决方案 »

  1.   

      if Value >= 0 then
        Result := Value
      else
        Result := MaxInt - Value
      

  2.   

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

  3.   

    int64 i64; i64 := DWORD(i);   // i 即你已可能OF的整数前提是OF不是太离普 至少不超过 DOWRD范围
      

  4.   


    var
      i: integer;
      b: Cardinal;
    begin
      i:= 3247483648;  // > 2147483647
      b:= i;
      showmessage(inttostr(b));
    end;
      

  5.   


    // 按你的最终结果为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;