void main() {
int i;
if (i < 0) { i = -i; };
}
क्या कोई मुझे यह समझने में सहायता कर सकता है कि उपरोक्त कार्यक्रम में ओवरफ़्लो क्यों हो सकता है?निम्नलिखित प्रोग्राम में ओवरफ़्लो क्यों हो सकता है?
void main() {
int i;
if (i < 0) { i = -i; };
}
क्या कोई मुझे यह समझने में सहायता कर सकता है कि उपरोक्त कार्यक्रम में ओवरफ़्लो क्यों हो सकता है?निम्नलिखित प्रोग्राम में ओवरफ़्लो क्यों हो सकता है?
एक अतिप्रवाह हो सकता है क्योंकि दो पूरक में पूर्णांक प्रतिनिधित्व की सीमा सममित नहीं है: सबसे छोटे नकारात्मक संख्या की परिमाण का प्रतिनिधित्व किया जा सकता है जो उच्चतम सकारात्मक संख्या का प्रतिनिधित्व किया जा सकता है, साथ ही साथ। उदाहरण के लिए, 32-बिट सिस्टम पर मान -2,147,483,648
और 2,147,483,647
हैं। यही कारण है कि -2,147,483,648
को नकारने का परिणाम बह जाएगा: नकारात्मकता का परिणाम, सकारात्मक मूल्य 2,147,483,648
, उसी आकार के int
में प्रदर्शित नहीं किया जा सकता है।
ध्यान दें कि इस समस्या का प्रतिलोम सच नहीं है: एक सकारात्मक संख्या को नकारने एक अतिप्रवाह में परिणाम नहीं होगा:
if (i > 0) { i = -i; } // No overflow here
@ टॉम कृपया ध्यान दें कि एमएसवीसी ने 'सीमा.h' में' # परिभाषित INT_MIN (-2147483647 - 1) 'है। –
समझते हैं ... बहुत बहुत धन्यवाद – Tom
कारण एक पूर्णांक अतिप्रवाह के लिए जब एक गणित आपरेशन एक अंकीय मान बनाने का प्रयास करता है वह सीमा के बाहर है जिसे किसी दिए गए बिट्स के साथ प्रदर्शित किया जा सकता है, या तो अधिकतम प्रतिनिधित्व करने योग्य मूल्य से अधिकतम या उससे कम से बड़ा।
i
प्रारंभ नहीं हुआ है। तो यहां क्या होगा कि पूर्णांक प्रकार के परिवर्तनीय i
को आवंटित स्मृति स्थान में कुछ कचरा मूल्य होगा।-2^31(-2,147,483,648)
है तो इस मान को अस्वीकार करने के परिणामस्वरूप पूर्णांक ओवरफ़्लो होगा।मुझे उम्मीद है कि इससे मदद मिलती है।
स्टैक में "i" का आपका मान, मुख्य प्रारंभ होने पर अपरिभाषित है। स्टार्ट-अप कोड जो मुख्य() से पहले चलता है उसे बुलाया जा सकता है।
Kashif ने कहा कि नकारात्मक पूर्णांक गैर-ऋणात्मक पूर्णांक से एक मान कम हो सकते हैं क्योंकि नकारात्मक को शून्य के लिए कमरे छोड़ने की आवश्यकता नहीं है। साइन बिट में एक "1", सभी शेष बिट्स शून्य के साथ, साइन ओवर होने पर ओवरफ़्लो का कारण बनता है।
16 बिट में: -0x8000 == ~ 0x8000 + 1 == 0x7FFF + 1 == 0x8000
// "-" नकारात्मक मूल्य == उलट + 1 == उल्टे + 1 == अंतिम एक ही
इस मूल्य का संभावित हुड कम है, लेकिन वर्तमान है। यह तब तक नहीं होगा जब तक कि ढेर नाराज संख्या में शामिल न हो।
अपरिभाषित व्यवहार। चर शुरू नहीं किया गया है। और सबसे नकारात्मक संभावित पूर्णांक को नकारने से दो के पूरक अंकगणित –
में समान मूल्य उत्पन्न होता है, 2 के पूरक में, | INT_MIN | > INT_MAX – BLUEPIXY
जब i == INT_MIN' दो के पूरक नोटेशन में। –