दो 32-बिट पूर्णांक जोड़ने से एक पूर्णांक अतिप्रवाह हो सकता है:
uint64_t u64_z = u32_x + u32_y;
यदि 32-बिट पूर्णांकों में से एक को पहले डाला जाता है या 64-बिट पूर्णांक में जोड़ा जाता है, तो इस अतिप्रवाह से बचा जा सकता है।
uint64_t u64_z = u32_x + u64_a + u32_y;
हालांकि, यदि कंपाइलर अतिरिक्त को फिर से तय करने का फैसला करता है:
uint64_t u64_z = u32_x + u32_y + u64_a;
पूर्णांक ओवरफ़्लो अभी भी हो सकता है।
क्या कंपाइलरों को इस तरह की पुनरावृत्ति करने की अनुमति है या क्या हम परिणाम असंगति को नोटिस करने और अभिव्यक्ति के क्रम को बनाए रखने के लिए उन पर भरोसा कर सकते हैं?
((uint32_t)-1 + (uint32_t)1) + (uint64_t)0
में परिणाम 0
है, जबकि (uint32_t)-1 + ((uint32_t)1 + (uint64_t)0)
में परिणाम 0x100000000
है, और इन दो मानों बराबर नहीं हैं। इसलिए यह महत्वपूर्ण है कि संकलक उस परिवर्तन को लागू कर सकता है या नहीं। लेकिन हाँ, मानक केवल हस्ताक्षर किए गए पूर्णांकों के लिए "अतिप्रवाह" शब्द का उपयोग करता है, अहस्ताक्षरित नहीं।
uint32_t
मूल्य दिखाई देते हैं - जो अतिप्रवाह नहीं करते हैं, वे लपेटते हैं। ये अलग व्यवहार नहीं हैं।