भयानक जवाब Galore
ओजगुर ओज़ितक
जब आपने हस्ताक्षरित से अहस्ताक्षरित (और इसके विपरीत) में डाला तो संख्या का आंतरिक प्रतिनिधित्व नहीं बदलता है। क्या परिवर्तन होता है संकलक साइन बिट की व्याख्या कैसे करता है।
यह पूरी तरह से गलत है।
मैट फ्रेड्रिक्सन
जब एक अहस्ताक्षरित और एक हस्ताक्षरित चर जोड़ा जाता है (या कोई भी बाइनरी ऑपरेशन) दोनों को अंतर्निहित रूप से अहस्ताक्षरित में बदल दिया जाता है, जो इस मामले में एक बड़ा परिणाम होगा।
यह भी गलत है। अहस्ताक्षरित प्रकार को बढ़ावा दिया जा सकता है, जिस प्रकार के प्रिंट में बिट्स को अविशिष्ट प्रकार में पैडिंग बिट्स के कारण समान परिशुद्धता होना चाहिए।
smh
आपके जोड़ के ऑपरेशन के कारण int को अहस्ताक्षरित int में परिवर्तित किया जा सकता है।
गलत। शायद यह करता है और शायद यह नहीं है।
अहस्ताक्षरित इंट से हस्ताक्षरित इंट में रूपांतरण कार्यान्वयन पर निर्भर है। (लेकिन यह संभवतः उन दिनों सबसे अधिक प्लेटफार्मों पर आपकी अपेक्षा के अनुरूप काम करता है।)
गलत। यह या तो अपरिभाषित व्यवहार है अगर यह अतिप्रवाह का कारण बनता है या मूल्य संरक्षित है।
गुमनाम
मैं का मान अहस्ताक्षरित int में बदल जाता है ...
गलत। एक अहस्ताक्षरित int के सापेक्ष एक int की सटीकता पर निर्भर करता है।
टेलर मूल्य
जैसा कि पहले उत्तर दिया गया था, आप बिना किसी समस्या के हस्ताक्षरित और बिना हस्ताक्षर के बीच आगे-पीछे कर सकते हैं।
गलत। अपरिभाषित व्यवहार में एक हस्ताक्षरित पूर्णांक परिणामों की सीमा के बाहर एक मूल्य को संग्रहीत करने की कोशिश करना।
अब मैं आखिरकार सवाल का जवाब दे सकता हूं।
Int की सटीकता अहस्ताक्षरित int के बराबर होनी चाहिए, u को एक हस्ताक्षरित int में पदोन्नत किया जाएगा और आपको अभिव्यक्ति (u + i) से -4444 मिलेगा। अब, क्या आपके पास अन्य मूल्य हैं, आपको अतिप्रवाह और अपरिभाषित व्यवहार मिल सकता है, लेकिन उन सटीक संख्याओं के साथ आपको -4444 [1] मिलेगा । इस मान का प्रकार int होगा। लेकिन आप उस मान को एक अहस्ताक्षरित int में संग्रहीत करने की कोशिश कर रहे हैं, ताकि फिर एक अहस्ताक्षरित int में डाल दिया जाए और जो परिणाम समाप्त हो जाएगा, वह (UINT_MAX + 1) - 4444 होगा।
क्या अहस्ताक्षरित int की सटीकता एक इंट की तुलना में अधिक होनी चाहिए, हस्ताक्षरित int को एक अहस्ताक्षरित int येल्डिंग वैल्यू (UINT_MAX + 1) में बढ़ावा दिया जाएगा - 5678 जो अन्य अहस्ताक्षरित int 1234 में जोड़ा जाएगा क्या आपके पास u और i होना चाहिए अन्य मान, जो अभिव्यक्ति को सीमा के बाहर गिरते हैं {0..UINT_MAX} मान (UINT_MAX + 1) या तो जोड़ा या घटाया जाएगा जब तक कि परिणाम सीमा के अंदर नहीं आते {0..UINT_MAX) और कोई अपरिभाषित व्यवहार नहीं होगा ।
परिशुद्धता क्या है?
इंटेगर में पैडिंग बिट्स, साइन बिट्स और वैल्यू बिट्स होते हैं। निरुपित पूर्णांक स्पष्ट रूप से एक संकेत बिट नहीं है। Unsigned char को पैडिंग बिट्स नहीं करने की गारंटी है। एक पूर्णांक बिट्स की संख्या में मान होता है कि इसमें कितनी सटीकता है।
[Gotchas]
यदि पैडिंग बिट्स मौजूद हैं, तो पूर्णांक आकार की मैक्रो का उपयोग पूर्णांक की सटीकता को निर्धारित करने के लिए नहीं किया जा सकता है। और बाइट का आकार ऑक्टेट (आठ बिट्स) होना जरूरी नहीं है जैसा कि C99 द्वारा परिभाषित किया गया है।
[१] अतिप्रवाह दो बिंदुओं में से एक पर हो सकता है। या तो इसके अलावा (पदोन्नति के दौरान) - जब आपके पास एक अहस्ताक्षरित int है जो कि एक int के अंदर फिट होने के लिए बहुत बड़ा है। ओवरफ्लो भी हो सकता है इसके अलावा अगर अहस्ताक्षरित इंट की सीमा के भीतर था, तो इसके अलावा परिणाम अभी भी अतिप्रवाह हो सकता है।