जैसा कि हम जानते हैं, हस्ताक्षरित पूर्णांक अतिप्रवाह अपरिभाषित व्यवहार है । लेकिन C ++ 11 cstdint
प्रलेखन में कुछ दिलचस्प है :
बिना किसी पैडिंग बिट्स के साथ क्रमशः 8, 16, 32 और 64 बिट्स की चौड़ाई के साथ हस्ताक्षरित पूर्णांक प्रकार और नकारात्मक मूल्यों के लिए 2 के पूरक का उपयोग करना (बशर्ते कि कार्यान्वयन सीधे प्रकार का समर्थन करता है)
और यहाँ मेरा सवाल यह है: मानक स्पष्ट रूप से कहते हैं के बाद से उस के लिए int8_t
, int16_t
, int32_t
और int64_t
नकारात्मक संख्या 2 के पूरक हैं, अभी भी इन प्रकार के एक अपरिभाषित व्यवहार के अतिप्रवाह है?
संपादित करें मैंने C ++ 11 और C11 मानकों की जाँच की और यहाँ वही है जो मैंने पाया:
C ++ 11, §18.4.1:
शीर्षलेख सभी मानक, प्रकार और मैक्रोज़ को C मानक में 7.20 के समान परिभाषित करता है।
C11, §7.20.1.1:
टंकण नाम
intN_t
चौड़ाई एन के साथ एक हस्ताक्षरित पूर्णांक प्रकार को नामित करता है, कोई पैडिंग बिट्स और एक दो का पूरक प्रतिनिधित्व नहीं करता है। इस प्रकार, इसint8_t
तरह के हस्ताक्षरित पूर्णांक प्रकार को 8 बिट्स की चौड़ाई के साथ निरूपित करता है।