दिलचस्प पोस्ट
एमएसएसक्यूएल में वर्ष और सप्ताह संख्या से तारीख का निर्माण आर में एक वेक्टर में लगातार / रोलिंग रकम ओफ़्सेट घटा सकते हैं- सरल और ऑफसेट-जागरूक डेटा स्वरूप चुनें * जहां मौजूदा नहीं है एंड्रॉइड आकृति रंग प्रोग्राम को सेट करें कोड से जावा स्विंग एप्लिकेशन को बंद कैसे करें क्या सी # विधियां * स्थिर * स्थिर हो सकती हैं? सरणी में स्ट्रिंग कैसे डालनी है, नई लाइन से विभाजित? एक वेबसाइट पर भारतीय मुद्रा प्रतीक प्रदर्शित करना OpenMP में "स्थिर" और "गतिशील" शेड्यूल के बीच अंतर क्या है? अपलोड करने से पहले फ़ाइल आकार की जांच करें क्या file_get_contents () में समयबाह्य सेटिंग है? .NET कंसोल अनुप्रयोग बाहर निकलें ईवेंट आप FROM खंड में अपडेट के लिए लक्ष्य तालिका निर्दिष्ट नहीं कर सकते 1-5 से 1-7 तक यादृच्छिक सीमा का विस्तार करें

सी ++ में पूर्णांक अतिप्रवाह अभी भी अपरिभाषित व्यवहार पर हस्ताक्षर किए गए हैं?

जैसा कि हम जानते हैं, पर हस्ताक्षर किए पूर्णांक अतिप्रवाह व्यवहार अनिर्धारित है । लेकिन सी + + 11 cstdint दस्तावेज में कुछ दिलचस्प है:

सटीक 8, 16, 32 और 64 बिट की चौड़ाई के साथ पूर्णांक प्रकार पर हस्ताक्षर किए, बिना कोई पैडिंग बिट्स और नकारात्मक मूल्यों के लिए 2 के पूरक का उपयोग करके (यदि कार्यान्वयन सीधे प्रकार का समर्थन करता है तभी)

लिंक देखें

और ये मेरा प्रश्न है: क्योंकि मानक स्पष्ट रूप से कहता है कि int8_t , int16_t , int32_t और int64_t नकारात्मक संख्या 2 के पूरक हैं, फिर भी इन प्रकारों के एक अपरिभाषित व्यवहार का अतिप्रवाह है?

संपादित करें मैंने सी +11 11 और सी 11 मानकों की जांच की और यहां मुझे क्या मिला:

सी ++ 11, § 18.4.1:

हेडर सभी कार्यों, प्रकारों और मैक्रोज़ को सी मानक में 7.20 के रूप में परिभाषित करता है।

सी 11, §7.20.1.1:

टाइपएपिफ़ नाम intN_t चौड़ाई N, कोई पैडिंग बिट्स के साथ एक हस्ताक्षरित पूर्णांक प्रकार निर्दिष्ट नहीं करता है, और दो पूरक पूरक है। इस प्रकार, int8_t इस तरह के एक हस्ताक्षरित पूर्णांक प्रकार को बिल्कुल 8 बिट की चौड़ाई के साथ दर्शाता है।

वेब के समाधान से एकत्रित समाधान "सी ++ में पूर्णांक अतिप्रवाह अभी भी अपरिभाषित व्यवहार पर हस्ताक्षर किए गए हैं?"

क्या अभी भी इन प्रकार के अपरिभाषित व्यवहार का अतिप्रवाह है?

हाँ। सी +11 11 मानक के अनुच्छेद 5/4 (सामान्य रूप में किसी भी अभिव्यक्ति के बारे में):

यदि किसी अभिव्यक्ति के मूल्यांकन के दौरान, परिणाम गणितीय परिभाषित नहीं है या इसके प्रकार के लिए प्रतिनिधित्व योग्य मानों की श्रेणी में नहीं है, तो व्यवहार अनिर्धारित है । […]

तथ्य यह है कि दो हस्ताक्षर किए गए तरीकों के लिए दो पूरक गुणों का उपयोग किया जाता है इसका अर्थ यह नहीं है कि उन प्रकारों के अभिव्यक्तियों का मूल्यांकन करते समय अंकगणितीय मॉड्यूलो 2 ^ एन का उपयोग किया जाता है।

अहस्ताक्षरित अंकगणितीय के संबंध में, दूसरी ओर, मानक स्पष्ट रूप से निर्दिष्ट करता है कि (पैराग्राफ 3.9.1 / 4):

अस्वाभाविक पूर्णांक, घोषित unsigned , अंकगणितीय modulo 2 ^ n के नियमों का पालन करना चाहिए जहां n संख्याओं की संख्या में उस पूर्णांक के उस विशेष आकार के मान प्रतिनिधित्व

इसका अर्थ है कि एक अहस्ताक्षरित अंकगणितीय आपरेशन का नतीजा हमेशा " गणितीय परिभाषित " होता है, और इसका परिणाम हमेशा प्रतिनिधित्व योग्य श्रेणी के भीतर होता है; इसलिए, 5/4 लागू नहीं होता है फुटनोट 46 बताता है:

46) इसका अर्थ है कि अहस्ताक्षरित अंकगणित अतिप्रवाह नहीं होता क्योंकि परिणामस्वरूप अहस्ताक्षरित पूर्णांक प्रकार के द्वारा प्रतिनिधित्व नहीं किया जा सकता, उस संख्या को कम किया जाता है जो कि सबसे बड़ा मान से बड़ा होता है जिसे परिणामी अहस्ताक्षरित पूर्णांक प्रकार से दर्शाया जा सकता है।

सिर्फ इसलिए कि एक प्रकार 2s पूरक प्रस्तुति का उपयोग करने के लिए परिभाषित किया गया है, यह उस प्रकार का अंकगणित अतिप्रवाह का पालन नहीं करता है

हस्ताक्षरित अंकगणित अतिप्रवाह के अपरिभाषित व्यवहार का उपयोग अनुकूलन को सक्षम करने के लिए किया जाता है; उदाहरण के लिए, संकलक यह मान सकता है कि यदि a > b तब a + 1 > b भी; यह अहस्ताक्षरित अंकगणित में नहीं पकड़ता है, जहां दूसरी जांच की संभावना है कि a + 1 आसपास 0 आसपास लपेट सकता है। साथ ही, कुछ प्लेटफ़ॉर्म अंकगणित अतिप्रवाह पर एक जाल संकेत उत्पन्न कर सकते हैं (जैसे http://www.gnu.org/software/libc/manual/html_node/Program-Error-Signals.html ); मानक यह होने की अनुमति देने के लिए जारी है

मैं तो शर्त लगाऊंगा

मानक दस्तावेज (पृष्ठ 4 और 5) से:

1.3.24 अपरिभाषित व्यवहार

व्यवहार जिसके लिए यह अंतर्राष्ट्रीय मानक कोई आवश्यकताएं नहीं लगाता है

[नोट: जब यह इंटरनेशनल स्टैण्डर्ड व्यवहार की किसी स्पष्ट परिभाषा को छोड़ता है या जब कोई प्रोग्राम गलत तरीके से निर्माण या गलत डेटा का उपयोग करता है तो अपरिभाषित व्यवहार की अपेक्षा की जा सकती है। अनुवाद या निष्पादन को समाप्त करने के लिए (जारी करने के साथ) या पर्यावरण के एक दस्तावेज तरीके के लक्षण (एक नैदानिक ​​संदेश जारी किए बिना) में अनुवाद या कार्यक्रम निष्पादन के दौरान बर्ताव करने के लिए पूरी तरह से अप्रत्याशित परिणामों के साथ स्थिति की अनदेखी करने से अनुवादात्मक अपरिभाषित व्यवहार सीमाएं एक नैदानिक ​​संदेश का) कई गलत प्रोग्राम निर्माण अपरिभाषित व्यवहार उत्पन्न नहीं करते हैं; वे निदान की आवश्यकता है। – अंत नोट]