दिलचस्प पोस्ट
IOS 7 में संपर्क लाएं ओरेकल एसक्यूएल में 2 तारीख / बार के बीच अंतर की गणना करें मेल को नेटवर्क क्रैडेन्शियल के रूप में प्रेषण के रूप में सही रूप में कार्य नहीं करता Attr_accessor और attr_accessible के बीच का अंतर नेट में एओपी के लिए सबसे अच्छा कार्यान्वयन क्या है? प्रश्न-चिह्न और बृहदान्त्र क्या होता है (?: टर्नरी ऑपरेटर) उद्देश्य-सी में क्या होता है? क्या HTTP शीर्ष-केस केस-संवेदी हैं? MSSQL त्रुटि 'अंतर्निहित प्रदाता ओपन पर असफल' कैसे पता लगाते हैं जब एक यूट्यूब वीडियो चलना खत्म हो जाए? मेरे .exe के लिए पथ प्राप्त करें उपयोग डेटाबेस में डाटा डालने के मापदंडों का उपयोग कर पॉइंटर्स का उपयोग करके एक अलग फ़ंक्शन से स्थानीय चर तक कैसे पहुंचें? एंड्रॉइड खोजदृश्य फ़िल्टर सूची दृश्य खाका मुद्दा लिंकर त्रुटि का कारण बनता है (सी ++) एंड्रॉइड ऑन क्रायेट या ऑनस्टार्ट कॉमांड सेवा शुरू करने के लिए

सी # में int के लिए कोई अतिप्रवाह अपवाद नहीं है?

प्रोजेक्ट ऑलर (जिस तरह से महान साइट) पर समस्या संख्या 10 के साथ मुझे यह अजीब अनुभव था। असाइनमेंट के लिए सभी प्राइम नंबरों की संख्या की गणना 20 लाख से नीचे की गई थी।

मैंने योग के लिए एक इंट का उपयोग किया था, और मेरी एल्गोरिथ ने एक जवाब प्रस्तुत किया, लेकिन जब मैंने इसे जवाब की पुष्टि करने के लिए चिपकाया, तो यह गलत था।

यह पता चला कि परिणाम एक इंट में फिट करने के लिए बहुत बड़ा था, लेकिन क्या यह एक अतिप्रवाह त्रुटि या कुछ कारण नहीं होगा? इसके बजाय, यह वास्तविक उत्तर से सिर्फ एक मूल्य वापस कर चुका है

जब मैंने इस प्रकार को लंबे समय से बदल दिया, तो सब कुछ हंकी डोरि था।

वेब के समाधान से एकत्रित समाधान "सी # में int के लिए कोई अतिप्रवाह अपवाद नहीं है?"

सी # पूर्णांक आपरेशन डिफ़ॉल्ट रूप से अतिप्रवाह पर अपवाद नहीं डालते हैं आप इसे परियोजना सेटिंग्स के माध्यम से प्राप्त कर सकते हैं या गणना की checked :

 int result = checked(largeInt + otherLargeInt); 

अब ऑपरेशन फेंक देगा।

इसके विपरीत unchecked , जो किसी भी ऑपरेशन को स्पष्ट रूप से अनचेक करता है। जाहिर है, यह केवल तब समझ में आता है जब आप परियोजना सेटिंग्स में सक्षम कार्रवाई की जांच की है

सी # में एक OverflowException अपवाद नहीं फेंका गया है (वीबी में प्रति डिफ़ॉल्ट को अपवाद दिया जाता है)

उत्तेजना प्राप्त करने के लिए आपको एक checked संदर्भ में अपना कोड एम्बेड करना होगा:

 byte value = 241; checked { try { sbyte newValue = (sbyte) value; Console.WriteLine("Converted the {0} value {1} to the {2} value {3}.", value.GetType().Name, value, newValue.GetType().Name, newValue); } catch (OverflowException) { Console.WriteLine("Exception: {0} > {1}.", value, SByte.MaxValue); } } 

एमएसडीएन अधिक विस्तार से बताता है:

ओवरफ्लो अपवाद को फेंकने के लिए अंकगणितीय, कास्टिंग, या रूपांतरण ऑपरेशन के लिए, ऑपरेशन एक जाँच किए गए संदर्भ में होने चाहिए। डिफ़ॉल्ट रूप से, विजुअल बेसिक में अंकगणितीय संचालन और ओवरफ्लोज की जांच की जाती है; सी # में, वे नहीं हैं यदि ऑपरेशन अनियंत्रित संदर्भ में होता है, तो परिणाम किसी भी उच्च-ऑर्डर बिट को छोड़कर गंतव्य प्रकार में फिट नहीं होता है।

ऐसा इसलिए है, क्योंकि डिफ़ॉल्ट रूप से सी # पूर्णांक के साथ-साथ अंडरफ्लो के लिए कोई अपवाद नहीं फेंकते हैं। यहां कुछ चीजें हैं जो आप यहां कर सकते हैं

विकल्प 1

आपको प्रोजेक्ट => गुण => बिल्ड टैब => उन्नत => अंकगणित अतिप्रवाह अंडरफ्लो के लिए जाएं द्वारा फेंकने के अपवाद को सक्षम करना होगा। (सुनिश्चित करें कि आप विकल्प को टिकें)

यहां छवि विवरण दर्ज करें

सुनिश्चित करें कि आप विकल्प को टिकें

विकल्प 2

एक चेक ब्लॉक का उपयोग करें और स्थिति को संभालने के लिए एक अतिप्रवाह अपवाद डालें। एक नमूना कोड स्निपेट होगा

  try { checked { int y = 1000000000; short x = (short)y; } } catch (OverflowException ex) { MessageBox.Show("Overflow"); } catch (Exception ex) { MessageBox.Show("Error"); } 

आशा है कि यह आपकी मदद करेगा… 🙂

मैंने पहले ही एक सीएमटी जोड़ा है, लेकिन यह आप में से कुछ के लिए दिलचस्प है:

एमएसडीएन हमें बताता है:

पूर्णांक अंकगणित अतिप्रवाह या तो अतिप्रवाह अपवाद फेंकता है या नतीजे के सबसे महत्वपूर्ण बिट को त्याग देता है

परंतु

दशमलव अंकगणित अतिप्रवाह हमेशा एक अतिप्रवाह अपवाद फेंकता है।

भी

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

डिफ़ॉल्ट रूप से, C # पूर्णांकों पर अंकगणित अतिप्रवाह के लिए जांच नहीं करता है आप इसे /checked कंपाइलर विकल्प के साथ या दृश्य स्टूडियो (प्रोजेक्ट गुण – बिल्ड – उन्नत) में "अंकगणित अतिप्रवाह / अंडरफ्लो के लिए चेक" सक्षम करके इसे बदल सकते हैं।

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

 int j = checked(i * 2); checked { int j = i * 2; // Do more stuff } 

ध्यान दें कि फ़्लोटिंग प्वाइंट आपरेशन कभी भी OverflowException नहीं फेंकते, और OverflowException आपरेशन हमेशा एक OverflowException फेंकते हैं। सी # ऑपरेटर्स भी देखें।