निम्न कोड में:डेटाप्रकार पदोन्नति
#include "stdio.h"
signed char a= 0x80;
unsigned char b= 0x01;
void main (void)
{
if(b*a>1)
printf("promoted\n");
else if (b*a<1)
printf("why doesnt promotion work?");
while(1);
}
मैं "पदोन्नत 'अपेक्षित मुद्रित करने के लिए लेकिन यह does not क्यों अगर मैं कर सकते हैं पर हस्ताक्षर किए और अहस्ताक्षरित पूर्णांक के लिए डेटाटाइप्स, और एक के रूप में की है।।? एक ऋणात्मक संख्या, जैसे, 0x80000000 और ख एक सकारात्मक संख्या, 0x01 के रूप में, "पदोन्नत" उम्मीद के रूप में मुद्रित किया जाता है।
plz मेरी मदद को समझने कि समस्या क्या है!
@ मानसिक मैं आपके उत्तर को समझ नहीं पा रहा हूं। यहां तक कि यदि यह int टाइप करने के लिए विस्तारित हो जाता है, जो मुझे नहीं लगता है, लेकिन यह मानते हुए, यह क्यों हस्ताक्षरित int को प्रचारित नहीं किया जा रहा है, और उत्पाद एक संख्या है? – Dom045
+1 - यह उत्तर एक लंबी मील (इसलिए मैंने इसे हटा दिया) से अधिक बेहतर/अधिक प्रासंगिक है –
@ Dom045 क्योंकि विनिर्देश ऐसा कहता है। 'हस्ताक्षर किए गए चार 'और' हस्ताक्षरित चार 'दोनों' int 'से कम प्रकार के होते हैं। तो उन्हें दोनों को 'int' में पदोन्नत किया जाएगा। 'हस्ताक्षरित int' बनाम 'हस्ताक्षरित int' मामले में, मानक निर्देश देता है कि वे दोनों को 'हस्ताक्षरित int' में परिवर्तित किया जाए। नियम यहां पाए जा सकते हैं: https://www.securecoding.cert.org/confluence/display/seccode/INT02-C.+Understand+integer+conversion+rules – Mysticial