दिलचस्प पोस्ट
मैं AVAudioRecorder के साथ आईफोन पर ऑडियो कैसे रिकॉर्ड करूं? NSLocalizedString को किसी विशिष्ट भाषा का उपयोग करने के लिए कैसे मजबूर किया जाए टूटी छवियों को बदलने के लिए jQuery / JavaScript सशर्त का उपयोग करने के लाभ:? (टर्नर) ऑपरेटर जावा सर्वलेट में बड़ी फ़ाइलों को स्ट्रीम करना आप यह सुनिश्चित कैसे करते हैं कि आप जिस प्रोग्राम को ईमेल भेजते हैं वह स्पैम के रूप में स्वचालित रूप से चिह्नित नहीं है? रूबी में इन ब्लॉकों कोडिंग शैलियों के अंतर या मान क्या हैं? अक्षम विशेषता के लिए सही मान अबाध वर्ग? किसी एप्लिकेशन या प्रक्रिया के वास्तविक मेमोरी उपयोग को कैसे मापें? वर्ग और उदाहरण विधियों के बीच अंतर क्या है? किसी ऑब्जेक्ट को रिक्त बनाम डिस्पोज़ (सेट करना) कैसे एक asp.net वेब एपीआई को सुरक्षित करने के लिए jqGrid "th" और "thead" मिलकर jQuery का उपयोग कर रहा है क्यों "आयात *" खराब है?

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

जैसा कि हम जानते हैं, पर हस्ताक्षर किए पूर्णांक अतिप्रवाह व्यवहार अनिर्धारित है । लेकिन सी + + 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 अपरिभाषित व्यवहार

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

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