परिचय
समस्या पूर्णांक अतिप्रवाह है। यदि यह ओवरफ्लो होता है, तो यह न्यूनतम मूल्य पर वापस चला जाता है और वहां से जारी रहता है। यदि यह कम हो जाता है, तो यह अधिकतम मूल्य पर वापस चला जाता है और वहां से जारी रहता है। नीचे की छवि एक ओडोमीटर की है। मैं इसका उपयोग ओवरफ्लो समझाने के लिए करता हूं। यह एक यांत्रिक अतिप्रवाह है लेकिन अभी भी एक अच्छा उदाहरण है।
एक ओडोमीटर में max digit = 9
, इसलिए, अधिकतम साधनों से परे जा रहा है 9 + 1
, जो कि वहन करता है और एक देता है 0
; हालाँकि 1
, बदलने के लिए कोई उच्च अंक नहीं है , इसलिए काउंटर को रीसेट करता है zero
। आपको यह विचार आता है - "पूर्णांक ओवरफ्लो" अब मन में आता है।
टाइप इंट का सबसे बड़ा दशमलव शाब्दिक 2147483647 (2 31 -1) है। 0 से 2147483647 तक के सभी दशमलव शाब्दिक रूप से कहीं भी एक अंतर शाब्दिक रूप में प्रकट हो सकता है, लेकिन शाब्दिक 2147483648 केवल एक ही नेगेटिव ऑपरेटर के ऑपरेटर के रूप में प्रकट हो सकता है -।
यदि एक पूर्णांक इसके अतिरिक्त होता है, तो परिणाम गणितीय योग के निम्न-क्रम बिट्स के रूप में होता है, जो कि कुछ पर्याप्त रूप से बड़े दो-पूरक प्रारूप में दर्शाया गया है। यदि अतिप्रवाह होता है, तो परिणाम का संकेत दो ऑपरेंड मानों के गणितीय योग के संकेत के समान नहीं है।
इस प्रकार, 2147483647 + 1
ओवरफ्लो होता है और चारों ओर लपेटता है -2147483648
। इसलिए int i=2147483647 + 1
अतिप्रवाह किया जाएगा, जो नहीं के बराबर है 2147483648
। इसके अलावा, आप कहते हैं "यह हमेशा 0 प्रिंट करता है"। यदि ऐसा नहीं होता क्योंकि http://ideone.com/WHrQIW । नीचे, ये 8 नंबर उस बिंदु को दिखाते हैं जिस पर यह पिवोट्स और ओवरफ्लो करता है। इसके बाद 0s प्रिंट करना शुरू करता है। इसके अलावा, आश्चर्यचकित मत हो कि यह कितनी तेजी से गणना करता है, आज की मशीनें तेज हैं।
268435456
536870912
1073741824
-2147483648
0
0
0
0
क्यों पूर्णांक अतिप्रवाह "चारों ओर लपेटता है"
मूल पीडीएफ