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

औरडेल्फी के अधिकतम की बग या सीमा। निरंतर पूर्णांक मूल्य?

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

फेंकना होगा:

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

यह एक बग या डेल्फी के अधिकतम की सीमा होती है। निरंतर पूर्णांक मूल्य?

+0

दिलचस्प! ऐसा लगता है कि यह डेविड द्वारा बताए गए समान (डुप्लिकेट) प्रश्न में डिस्क स्पेस का प्रतिनिधित्व करने से भी संबंधित है। –

उत्तर

10

आपको दाईं ओर कम से कम एक मूल्य Int64 पर डालना होगा। उदाहरण के लिए, इन दोनों को XE6 पर पूरी तरह से अच्छी तरह से संकलन:

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

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

नोट यह rvalues ​​कि कलाकारों में से किसी एक हो सकता है। उदाहरण के लिए, इस काम करता है समान रूप से और साथ ही:

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

यह Delphi language guide में प्रलेखित है (हालांकि नहीं बल्कि खराब) - जोर मेरा:

सामान्य तौर पर, पूर्णांकों पर अंकगणितीय आपरेशनों का मान प्रदान इंटीजर टाइप करें, जो 32-बिट LongInt के बराबर है। ऑपरेशंस केवल एक या अधिक Int64 ऑपरेटरों पर प्रदर्शन करते समय Int64 प्रकार का मान देता है। गलत परिणाम इसलिए, निम्नलिखित कोड का उत्पादन:

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

इस स्थिति में एक Int64 वापसी मान, मैं Int64 के रूप में कास्ट पाने के लिए:

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

धन्यवाद केन, मेरा कामकाज (जो प्रश्न में प्रकट नहीं हुआ) थोड़ा और वर्बोज था: पी –

संबंधित मुद्दे