2011-06-07 11 views
13

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

  • वी (अतिप्रवाह) - 7FFFFFFF +1
  • सी (कैरी) - FFFFFFFF + 1
उदाहरण के लिए

मुमकिन है, पता केवल 8 बाइट्स पकड़ कर सकते हैं। तो मेरे लिए, ऐसा लगता है कि 1 से 7 एफएफएफएफएफएफएफ 80000000 जोड़ता है। मैंने सोचा कि 80000000 अभी भी 8-बाइट पते में फिट होगा।

यह एक अंकगणित अतिप्रवाह क्यों है? क्या यह स्लाइड पर चारों ओर गलत तरीका है? या मेरी समझ त्रुटिपूर्ण है?

किसी भी प्रतिक्रिया के लिए धन्यवाद

+2

आप एक हस्ताक्षरित पूर्णांक ओवरफ़्लो करते हैं। 0x80000000 64 बिट दो के पूरक अंकगणित (0x7fffffff से एक के बजाय) में सबसे बड़ा संभव * नकारात्मक * मान है। – falstro

+0

@ फाल्स्ट्रो, यह 32 बिट है :) – sgupta

+0

@ user1075375 हाँ, मुझे पता है। कैफीन पर कम होना चाहिए। :) – falstro

उत्तर

25
  • ओवरफ्लो झंडे तैयार हो जाओ जब रजिस्टर ठीक से एक हस्ताक्षरित मूल्य के रूप में परिणाम का प्रतिनिधित्व नहीं कर सकते हैं (आप साइन बिट में overflowed)।
  • कैरी झंडे सेट होते हैं जब रजिस्टर सही ढंग से परिणाम को एक हस्ताक्षरित मान के रूप में प्रस्तुत नहीं कर सकता (कोई साइन बिट आवश्यक नहीं है)।
+0

ठीक है कि समझ में आता है - धन्यवाद! – eggonlegs

+0

काफी सरल और संक्षिप्त। धन्यवाद दोस्त!! –

5

साइन बिट दूषित होने पर आपको ओवरफ़्लो मिलता है। तो आप जानते हैं कि आपको अपना परिणाम समायोजित करना होगा।

यदि परिणाम इस मान में फिट नहीं होता है तो आपको एक कैर मिलता है। (आपके पास अधिक बिट्स की आवश्यकता है)।

पुराने दिनों में आपको बहु बाइट मूल्यों के लिए अपना स्वयं का जोड़ और गुणा सबराउटिन लिखना पड़ा।