c# - Why dividing int.MinValue by -1 threw OverflowException in unchecked context? -


<पूर्व> int y = -2147483648; Int z = अनचेक (y / -1);

दूसरी पंक्ति अतिप्रवाह अपवाद का कारण बनती है। क्या अनचेक नहीं होना चाहिए इसे रोकना?

उदाहरण के लिए:

  int y = -2147483648; Int z = अनचेक किया गया (y * 2);  

अपवाद का कारण नहीं है।

अनुभाग 7.72 ( सी # 4 चश्मा राज्यों के प्रभाग ऑपरेटर):

यदि बाएं ऑपरेंड सबसे छोटा प्रतिनिधित्व योग्य या लंबे मान है और सही ऑपरेंड -1 है, तो एक अतिप्रवाह होता है। एक जांच के संदर्भ में, [...] एक अनियंत्रित संदर्भ में, यह कार्यान्वयन-परिभाषित है कि क्या कोई सिस्टम। अरथेटिक्सिक अपवाद (या उसका उप-वर्ग) फेंका जाता है या बायां प्रचालक के परिणामस्वरूप मूल्य के साथ अतिप्रवाह विवरण नहीं होता है।

इसलिए तथ्य यह है कि यह एक अनियंत्रित संदर्भ में एक अपवाद फेंकता वास्तव में एक बग नहीं है, क्योंकि व्यवहार कार्यान्वयन-परिभाषित है।


Comments