समस्या यह है कि शाब्दिक "99" एक पूर्णांक के रूप में इलाज किया जा रहा है। यदि आप "एल" जोड़ते हैं तो यह लंबे समय तक इसका इलाज करेगा। अपने संकलन समस्या को ठीक करने के लिए:
long test2 = 99L * 99L * 99L * 99L * 99L;
और "गलत परिणाम" पूर्णांक अतिप्रवाह की वजह से ठीक करने के लिए:
long r = 99;
long test1 = r * r * r * r * r;
प्रमुख मुद्दा है कि "=" मूल्यांकन किया जाता है सही करने के लिए अभिव्यक्ति से पहले long r
को असाइनमेंट किया गया है।
आप में रुचि हो सकती अन्य शाब्दिक प्रत्यय के होते हैं: क्यों यह 919965907. क्या हो रहा है के लिए बाहर आता है के बारे में अपने प्रश्न के बारे में
Type Suffix Example
uint U or u 100U
long L or l 100L
ulong UL or ul 100UL
float F or f 123.45F
decimal M or m 123.45M
@ m.edmonson, कि मूल्य "रैपिंग" के आसपास है int.MaxValue। आप इसे थोड़ा परीक्षण कार्यक्रम के साथ देख सकते हैं:
int i = 99; // 99
i *= 99; // 9801
i *= 99; // 970299
i *= 99; // 96059601
i *= 99; // 919965907 should be 9509900499 but comes out to 919965907
// which is (9509900499 % int.MaxValue)
long k = 9509900499 % int.MaxValue;
"लपेटने" का क्या अर्थ है? जब आप int.MaxValue
से 1 तक पार करते हैं, तो मान "वापस चला जाता है" int.MinValue
पर।
int j = int.MaxValue;
j++;
bool isNowMinValue = (j == int.MinValue); // true, the value has "wrapped around"
यह थोड़ा सा सरल है; यदि आप "पूर्णांक ओवरफ़्लो" की खोज करते हैं तो आपको बेहतर स्पष्टीकरण मिलेगा। यह कैसे समझ पूर्णांकों (और अन्य संख्यात्मक प्रकार) 32 बिट के साथ प्रतिनिधित्व कर रहे हैं लायक है:
http://en.wikipedia.org/wiki/Signed_number_representations
उत्कृष्ट उत्तर - क्या आप समझा सकते हैं कि वह क्यों लंबे और पूर्णांक गुणा के बीच एक अलग परिणाम मिलता है? –
क्या आप लपेटकर अपना मतलब समझ सकते हैं? और मॉड्यूलस% के साथ क्या करना है? –
मेरा मानना है कि आपको केवल एक '99 एल' की आवश्यकता है, बाकी का उपहास होगा। –