Why did these two program behave differently in ANSI C? -


संभव डुप्लिकेट:

1।

  मुख्य () {if (-1 (lt; (अहस्ताक्षरित चार) 1) printf ("- 1 कम (अहस्ताक्षरित चार) 1: ANSI सिमेंटिक"); अन्य प्रिंटफ़ ("- 1 से कम नहीं (अहस्ताक्षरित चार) 1: के & amp; आर सिमेंटिक्स"); }  

2।

  int array [] = {23,41,12,24,52,11}; #define TOTAL_ELEMENTS (sizeof (array) / sizeof (सरणी [0])) मुख्य () {int d = -1, x; अगर (डी एंड एलटी; = TOTAL_ELEMENTS -2) एक्स = सरणी [डी + 1]; }  

पहले एएनएसआई सी में एक हस्ताक्षरित चर में हस्ताक्षर किए गए, जबकि दूसरा प्रोग्राम एक अहस्ताक्षरित अंतराल में घ परिवर्तित करता है जिससे एएनएसआई सी में स्थिति अभिव्यक्ति लौटाई जाती है। अलग तरीके से व्यवहार करें?

दाएं हाथ की ओर एक अहस्ताक्षरित अक्षर है, और सभी अहस्ताक्षरित चार मान एक हस्ताक्षरित int में फिट होते हैं, इसलिए इसे हस्ताक्षरित int में कनवर्ट किया जाता है।

दाएं हाथ की ओर एक अहस्ताक्षरित int है, इसलिए बाएं हाथ को हस्ताक्षरित int से अहस्ताक्षरित int पर कनवर्ट किया जाता है ।

भी देखें।


Comments