जब मैं इस तरह सी में दो अहस्ताक्षरित वर्ण गुणा करते हैं:ओवरफ़्लो जब हस्ताक्षरित वर्ण गुणा करते हैं?
unsigned char a = 200;
unsigned char b = 200;
unsigned char c = a * b;
तो मैं जानता हूँ कि मैं एक अतिप्रवाह होगा, और मैं एक परिणाम के रूप (40'000 सापेक्ष 256)। जब मैं ऐसा करता हूं:
unsigned char a = 200;
unsigned char b = 200;
unsigned int c = (int)a * (int)b;
मुझे सही परिणाम 40'000 मिलेगा। हालांकि, मुझे नहीं पता कि इसके साथ क्या होता है:
unsigned char a = 200;
unsigned char b = 200;
unsigned int c = a * b;
क्या मुझे यकीन है कि सही चीज होती है? क्या यह कंपाइलर निर्भर है? इसी तरह, मैं नहीं जानता कि जब एक घटाव कर क्या होता है:
unsigned char a = 1;
unsigned char b = 2;
int c = a - b;
जब बनाने "सी" एक अहस्ताक्षरित चार, मैं शायद एक परिणाम के रूप में 255 मिल जाएगा। क्या होता है जब मैं इस तरह int int का उपयोग करता हूं?
यूप, "पदोन्नति" कीवर्ड था। यहां मुझे कुछ और विवरण मिला: https://www.securecoding.cert.org/confluence/display/seccode/INT02-C.+Understand+integer+conversion+rules –