संभव डुप्लिकेट:
signed to unsigned conversion in C - is it always safe?क्या होता है जब मैं एक हस्ताक्षरित int को ऋणात्मक मान निर्दिष्ट करता हूं?
मान लीजिए कि मैं प्रकार अहस्ताक्षरित int की एक चर घोषित करते हैं: unsigned int x = -1;
अब -1 दो के पूरक में (यह मानते हुए 32 बिट मशीन) 0xFFFFFFFF है । अब जब मैंने x को यह मान असाइन किया था, तो क्या मान 0x7FFFFFFF को x को असाइन किया गया था?
यदि ऐसा था, तो printf ("% d", x); 0x7FFFFFFF के दशमलव समकक्ष मुद्रित किया होगा, है ना? लेकिन, स्पष्ट रूप से यह नहीं हो रहा है, क्योंकि मुद्रित मूल्य -1 है। मुझे यहां क्या समझ नहीं आ रहा है?
संपादित करें: मुझे पता है कि हम हस्ताक्षर किए गए मान मुद्रित करने के लिए% u प्रारूप विनिर्देश का उपयोग कर सकते हैं। लेकिन यह उपरोक्त प्रश्न का उत्तर देने में मदद नहीं करता है।
'0x7FFFFFFF कहां से आया था? –
@Evan: एमएसबी फ़्लिपिंग। बस एक अनुमान है, क्योंकि मुझे नहीं पता कि रूपांतरण वास्तव में कैसे होता है – n0nChun
सी 99 मानक के खंड 6.3.1.3 को आपके प्रश्न का उत्तर देना चाहिए। लेकिन इससे आपके प्रश्न का थोड़ा बेहतर जवाब देना चाहिए http://stackoverflow.com/questions/50605/signed-to-unsigned-conversion-in-c-is-it-always-safe – Joe