आप unsigned int
की तुलना signed char
से कर रहे हैं। इस तरह की तुलना के अर्थशास्त्र प्रति-अंतर्ज्ञानी हैं: signed
और unsigned
ऑपरेटरों से जुड़े अधिकांश द्विआधारी संचालन हस्ताक्षरित मूल्य को बिना हस्ताक्षर किए जाने के बाद, हस्ताक्षरित किए गए ऑपरेटरों पर निष्पादित किए जाते हैं (यदि दोनों ऑपरेटरों के प्रचार के बाद समान आकार होता है)।
signed char
मूल्य एक ही मूल्य -23
के साथ एक int
के लिए प्रोत्साहित किया जाता है: ये कदम उठाएँ।
- तुलना
int
और unsigned int
पर तुलना की जानी है, सामान्य मानक unsigned int
सी मानक में परिभाषित किया गया है।
int
unsigned int
में UINT_MAX - 23
के साथ एक बहुत बड़ी संख्या में परिवर्तित किया गया है।
- तुलना
unsigned int
मानों पर किया जाता है: 23
छोटा मूल्य है, तुलना झूठी का मूल्यांकन करती है।
else
शाखा का मूल्यांकन किया गया है, no
मुद्रित है।
मामले को बदतर बनाने के लिए, अगर c
एक long
के रूप में परिभाषित किया गया था, परिणाम long
और int
एक ही आकार के हों या न हों पर निर्भर होता है। विंडोज़ पर, यह no
प्रिंट करेगा, जबकि 64 बिट लिनक्स पर, यह yes
प्रिंट करेगा।
तुलना में हस्ताक्षरित और हस्ताक्षरित मानों को कभी भी मिश्रण न करें। इस प्रकार की गलती को रोकने के लिए कंपाइलर चेतावनियां सक्षम करें (-Wall
या -Weverything
)। आप इस तरह के दुर्भाग्यपूर्ण कोड से पूरी तरह से बचने के लिए -Werror
के साथ इन सभी चेतावनियों को घातक बना सकते हैं।
आप कार्य समूह की वेबसाइट से C11 स्टैंडर्ड के नवीनतम मसौदे डाउनलोड कर सकते हैं: के बारे में http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1570.pdf
पढ़ें [दो के पूरक] (https://en.wikipedia.org/wiki/Two%27s_complement)। और [सी में निहित रूपांतरण] (http: //en.cppreference।कॉम/डब्ल्यू/सी/भाषा/रूपांतरण) (विशेष रूप से [अंकगणितीय रूपांतरण] के बारे में (http://en.cppreference.com/w/c/language/conversion#Usual_arithmetic_conversions))। –
कैनोनिकल स्रोत [सी मानक] है (http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1570.pdf) (यह एन 1570 ड्राफ्ट है)। * पूर्णांक पदोन्नति * के लिए 6.3.1.1 देखें (जो 'हस्ताक्षरित char' मान को 'int' में परिवर्तित करता है), और सामान्य अंकगणितीय रूपांतरणों के लिए 6.3.1.8 * (जो दोनों ऑपरेटरों को एक सामान्य प्रकार में परिवर्तित करता है,' हस्ताक्षरित int ' तुलना करने से पहले)। –