2010-06-24 13 views
11

मेरे पास एक लूप है जो लूप पूर्ण होने तक एक पूर्णांक मूल्य को बढ़ाता रहता है। तो यदि सीमा एन एक डबल चर है और वृद्धिशील चर 'i' एक पूर्णांक है, तो मैं इसकी सीमाओं से आगे बढ़ता हूं।इसकी पूर्णांक सीमा से परे एक पूर्णांक मूल्य में वृद्धि - सी #

double total = 0; 
double number = hugetValue; 
for (int i = 1; i <= number; i++) 
{ 
    total = total + i; 
} 
return total; 

'i' के साथ क्या होता है यदि यह इसकी क्षमता से अधिक हो? मैं कैसे मूल्य बदलता हूं? क्या मुझे रनटाइम त्रुटि मिल जाएगी?

धन्यवाद

NLV

+1

कौन सी भाषा? – sharptooth

+0

शीर्षक संपादित किया गया। – NLV

+1

मैंने प्रश्न में सी # टैग जोड़ा। कुछ लोगों के लिए (यानी, मेरे लिए कम से कम) जो अधिक उपयोगी है। इसलिए आपको टैग के आधार पर फ़िल्टर/आउट करने की अनुमति मिलती है, और आप टैग के आधार पर प्रश्नों की सूचियां प्राप्त कर सकते हैं। अधिकांश समय मैं केवल विशिष्ट टैग देखता हूं जिसके लिए मुझे रूचि है और केवल प्रत्येक को टैग के बावजूद सबसे हालिया प्रश्नों की एक सूची मिलती है। –

उत्तर

8

सी के कुछ प्रत्यारोपणों में व्यवहार के समान, जहां int बस INT_MAX से INT_MIN तक लपेटता है (हालांकि यह वास्तव में आईएसओ मानक के अनुसार अपरिभाषित व्यवहार है), सी # भी लपेटता है। वीएस 2008 में इसका परीक्षण:

int x = 2147483647; 
if (x+1 < x) { 
    MessageBox.Show("It wrapped..."); 
} 

परिणामस्वरूप संदेश बॉक्स को अपरिवर्तित किया जाएगा।

यदि आपका hugetValue अधिकतम int मान से अधिक है, तो आपका लूप इस वजह से हमेशा के लिए चलाएगा।

उदाहरण के लिए, अगर यह 2147483648 है, बस के रूप में आपको लगता है कि आप -2147483648 को 2147483647 से इसे करने के लिए करीब हो रही है, int wraps चारों ओर पीठ और पाश बस जा रहा पर रहता है।

+0

मैंने सी # में लिखा था। इसका जिक्र करने के लिए खेद है। मैं आपके जवाब को समझता हूं। – NLV

+0

@ एनएलवी: कुछ सी # के लिए जाते हैं। – leppie

+0

@ एनएलवी: मैंने सी # टैग को शामिल करने के लिए प्रश्न संपादित किया है। ध्यान दें कि कई प्रश्नों में भाषा महत्वपूर्ण है (कुछ रूपांतरण को स्पष्ट रूप से अनुमति देते हैं, कुछ इसे संकलित समय पर अनुमति नहीं देंगे)। एक प्रश्न बनाते समय आप जो अधिक जानकारी प्रदान करते हैं - उचित शर्तों के साथ - बेहतर। –

3

क्षमा याचना अगर यह कठोर लगता है, लेकिन आप तक इस खुद कोशिश कर रहा द्वारा और जानेंगे।

संपादित: आह, तो आपने इसे आजमाया, और अप्रत्याशित परिणाम प्राप्त हुए। जैसा कि सी-जैसी भाषाओं को समझाया गया है, चुपचाप पूर्णांक अंकगणित लपेटते हैं। अगर अतिप्रवाह की जांच की लागत अधिक है तो यह वास्तव में काफी उचित व्यवहार है। एक बार जब आप जानते हैं कि यह एक कोड सावधानी से हो सकता है, विशेष रूप से आपके उदाहरण में निर्माण के प्रकार के लिए देख रहे हैं।

+0

इसे सही मायने में ले लिया। मैंने वास्तव में कोशिश की और एक अनंत पाश में फंस गया था। जब मैंने इसे डीबग किया तो मैंने देखा कि मेरा मूल्य नकारात्मक है। मैं सोच रहा था कि क्यों यह एक त्रुटि फेंक दिया और इसके बजाय लूप जारी रखा था। इसके लिए कोई कारण? – NLV

+0

यहां दो अलग-अलग मुद्दे हैं, क्यों रूपांतरण नकारात्मक संख्या उत्पन्न करता है और क्यों संकलक नकारात्मक मान की स्थिति पर शिकायत नहीं करता है। नवीनतम सरल है: आप पाश के अंदर लूप चर को संशोधित कर सकते हैं और इसे नकारात्मक बना सकते हैं। यह पता लगाना कि यह होता है या नहीं, संकलक के लिए बहुत जटिल समस्या है, इसलिए यह मानता है कि आप जानते हैं कि आप क्या चाहते हैं (या जब आप अपने अनंत लूप में फंस जाते हैं तो आपको जल्द ही पर्याप्त मिल जाएगा) –

2

यदि आप एक अपवाद चाहते हैं, तो checked संकलक विकल्प की आपूर्ति करें, या checked सी # में उपलब्ध कराई गई रचना का उपयोग करें।

+0

बस एक स्रोत उद्धृत करने के लिए: http://msdn.microsoft.com/en-us/library/a569z7k8.aspx असल में सभी ऑप्स अनचेक किए जाते हैं, जब तक कि आप दोनों तरफ स्थिरांक का उपयोग नहीं कर रहे हैं - उनको संकलित समय पर चेक किया जाता है। –

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