2014-05-13 18 views
6
const 
    minDriveFreeSpace: Int64 = 1024*1024*1024*99; 

iBłąd lub ograniczenie wartości maksymalnej Delphi. stałe liczby całkowite?

var 
    minDriveFreeSpace: Int64; 
begin 
    minDriveFreeSpace := 1024*1024*1024*99; 

wyemituje:

[dcc32 Error] DataStoreLocator.pas(92): E2099 Overflow in conversion or arithmetic operation 

Jest to błąd lub limit max Delphi. stałe liczby całkowite?

+0

Ciekawe! Wydaje się, że jest to również związane z reprezentowaniem spodu dysku w tym podobnym (zduplikowanym) pytaniu wskazanym przez Davida. –

Odpowiedz

10

Musisz rzucić co najmniej jedną wartość z prawej strony na Int64. Na przykład, zarówno tych kompilacji doskonale na XE6:

const 
    minDriveFreeSpace = Int64(1024) * 1024 * 1024 * 99; 

var 
    minDriveFreeSpace2: Int64; 
begin 
    minDriveFreeSpace2 := Int64(1024)*1024*1024*99; 

Należy pamiętać, że może to być dowolny z rvalues ​​które oddanych. Na przykład, działa równie dobrze:

const 
    minDriveFreeSpace = 1024 * 1024 * 1024 * Int64(99); 

Jest to udokumentowane w Delphi language guide (choć raczej słabo) - nacisk Mine:

W ogóle, operacje arytmetyczne na całkowite zwraca wartość typ Integer, który jest odpowiednikiem 32-bitowej LongInt. Operacje zwracają wartość typu Int64 tylko wtedy, gdy wykonywane są na jednym lub kilku operandach Int64. Dlatego dodaje kod generuje nieprawidłowe wyniki:

var 
I: Integer; 
J: Int64; 
... 
I := High(Integer); 
J := I + 1; 

uzyskać wartości zwracanej Int64 w tej sytuacji oddania I jak Int64:

... 
J := Int64(I) + 1; 
+0

Dzięki Ken, Moje obejście (które nie pojawiło się w pytaniu) było nieco bardziej szczegółowe: P –

Powiązane problemy