long freeSize = ((Main.maxSPace-Main.usedSpace)*1000*1000);
maxSpace = 20000
usedSpace = 8
->freeSize = -1482836480
घटाकर देशांतर गलत हो जाता है
क्यों इस परिणाम नकारात्मक है?
long freeSize = ((Main.maxSPace-Main.usedSpace)*1000*1000);
maxSpace = 20000
usedSpace = 8
->freeSize = -1482836480
घटाकर देशांतर गलत हो जाता है
क्यों इस परिणाम नकारात्मक है?
long
को int
से maxSpace
और usedSpace
के प्रकार बदलें। आप ऐसा करते हैं तो ऐसा नहीं कर सकते हैं, बस की तरह
long freeSize = 1000L*1000*(Main.maxSPace - Main.usedSpace);
तो परिणाम long
, नहीं int
के रूप में गणना की जाएगी कुछ करने के लिए अपने कोड बदल जाते हैं।
अब यह इस
Main.maxSPace-Main.usedSpace -> 19992
(Main.maxSPace-Main.usedSpace)*1000 -> 19992000
(Main.maxSPace-Main.usedSpace)*1000*1000L -> 19992000000
समस्या यहाँ की तरह गणना की जाती है कि हम पूर्णांकों पर काम कर रहे हैं है, इसलिए परिणाम भी पूर्णांक होना चाहिए, लेकिन पूर्णांक के अधिकतम मूल्य
2147483647 so
19992000000 is out of range
तो जावा होगा है परिणाम के केवल अंतिम 32 बिट्स लें और इसे पूर्णांक
10010100111100111011011011000000000 -> 19992000000
10100111100111011011011000000000 -> -1482836480
maxSpace
और usedSpace
इनट्स के रूप में घोषित किए जाते हैं, इसलिए सभी अंकगणित इनट्स के साथ किया जाता है। केवल तभी जब आप परिणाम freeSize
पर असाइन करते हैं, तो यह लंबे समय तक डाला जाता है, लेकिन तब से अतिप्रवाह हुआ है।
1000L
साथ नंबर 1000
के बजाय ऐसे बलात्कार पहले हो के कारण:
long freeSize = ((Main.maxSPace-Main.usedSpace)*1000L*1000L);
जब maxSpace और usedSpace प्रकार के होते हैं int आप प्रकार अतिप्रवाह की वजह से एक नकारात्मक मूल्य मिलेगा। MaxSpace और usedSpace दोनों चर के लिए लंबे समय तक उपयोग करें।
long freeSize = ((Main.maxSPace-Main.usedSpace)*1000L*1000L);
आप शायद एक ऋणात्मक संख्या हो रही है क्योंकि maxSpace
और usedSpace
ints हैं: वैकल्पिक रूप से, अगर आप मुख्य की संपत्ति प्रकार नहीं बदल सकते हैं आप अपने कोड को बदल सकते हैं। 20000 - 8 = 19992
, 19992 * 1000000 = 19992000000
जो Long.MAX_VALUE
से कम है (2 - 1) लेकिन यह Integer.MAX_VALUE
(2 - 1) से अधिक है। 19992000000 - Integer.MAX_VALUE = 17844516353
जो अभी भी int के मूल्य के लिए सीमा से बाहर है। आपको maxSpace
और usedSpace
लंबे समय तक रहने देना चाहिए।
वे अधिकतम स्पेस के मूल्य हैं और इस्तेमाल किए गए एसपीए ce? – Justin
क्या आप अंकगणित के बाद अधिकतम स्पेस और प्रयुक्त स्पेस घोषित करते हैं या आप बस हमें बता रहे हैं कि वे क्या बराबर हैं? आपको अधिक कोड –
पोस्ट करने की आवश्यकता है MaxSpace, usedSpace चर किस प्रकार हैं? –