/ / जब आप C ++ में int टाइप करने के लिए ascii चार्ट पर नहीं है, तो क्या होता है - सी ++, कास्टिंग, एससीआई

क्या होता है जब आप एक ऐसा चरित्र डालते हैं जो सी ++ में int टाइप करने के लिए एसीआई चार्ट पर नहीं है? - सी ++, कास्टिंग, ascii

क्या यह इसका अपना मूल्य है? क्या कुछ पात्र प्रोग्राम को क्रैश करेंगे?

उत्तर:

जवाब के लिए 2 № 1

की धारणा के साथ sizeof(char) < sizeof(int)। और नीचे दिए गए उदाहरण के लिए, मान लें कि 32-बिट पूर्णांक और एक 2 पूर्ण आर्क है।

कास्टिंग एक हस्ताक्षरित चार या एक अहस्ताक्षरित चार ए के लिए हस्ताक्षरित पूर्णांक अभिव्यक्ति का परिणाम उसी मूल्य को होगा जो इंट को बढ़ावा दिया जाता है।

कास्टिंग ए अचिन्हित वर्ण एक को अहस्ताक्षरित int अभिव्यक्ति का परिणाम उसी मान को दिया जाएगा जिसे अहस्ताक्षरित इंट में प्रचारित किया जा रहा है।

कास्टिंग एक हस्ताक्षरित चार एक को अहस्ताक्षरित पूर्णांक अभिव्यक्ति में थोड़ा अलग व्यवहार हो सकता हैआप कास्टिंग के बारे में कैसे सोचते हैं इसके आधार पर। हस्ताक्षरित चार्ट पर हस्ताक्षर किए गए पूर्णांक को पहले बढ़ावा दिया जाएगा - जिसमें किसी भी नकारात्मक मूल्य को बनाए रखने के लिए "हस्ताक्षरित विस्तारित" प्राप्त करना शामिल है। फिर अहस्ताक्षरित करने के लिए डाली।

बाद के मामले में एक दिलचस्प साइड इफेक्ट होता है जब नकारात्मक मूल्यों को कास्टिंग और बढ़ावा देता है।

signed char c = 0x7f;  // 0x7f expressed as a signed char is 127
unsigned int n = c; // n gets 0x0000007f (127)


signed char c = 0xff;  // 0xff expressed as a signed char is -1
unsigned int n = c; // n gets 4294967295 (0xffffffff)

इस कारण से मैं स्पष्ट रूप से "हस्ताक्षरित चार" बनाम "अहस्ताक्षरित चार" कहता हूं, क्योंकि यह चर है:

char c;

इस बात पर निर्भर करता है कि संकलक इसका इलाज कैसे करता है, इस पर हस्ताक्षर किए जा सकते हैं। अधिकांश कंपाइलर हस्ताक्षर करने के लिए डिफ़ॉल्ट हैं, लेकिन उनके पास संकलित विकल्प के रूप में अहस्ताक्षरित है।

मुझे कुछ कीड़े ठीक करने थे, क्योंकि कोड ने चार के लिए गलत साइन-नेस मान लिया था।