जब अहस्ताक्षरित के साथ हस्ताक्षरित तुलना, संकलक हस्ताक्षरित मूल्य को अहस्ताक्षरित में परिवर्तित करता है। समानता के लिए, यह कोई फर्क नहीं पड़ता, -1 == (unsigned) -1
। अन्य तुलनाओं के लिए यह मायने रखता है, उदाहरण के लिए निम्न सत्य है -1 > 2U
:।
संपादित करें: संदर्भ:
5/9: (भाव)
कई द्विआधारी संचालक, जो अंकगणित या गणना के प्रकारों के संचालन की अपेक्षा करते हैं, एक समान तरीके से रूपांतरण और परिणाम प्रकार का कारण बनते हैं। उद्देश्य एक सामान्य प्रकार की उपज है, जो परिणाम का प्रकार भी है। इस पैटर्न को सामान्य अंकगणितीय रूपांतरण कहा जाता है, जिसे निम्नानुसार परिभाषित किया गया है:
यदि या तो ऑपरेंड टाइप डबल का है, तो दूसरा लॉन्ग डबल में बदल जाएगा।
अन्यथा, यदि कोई ऑपरेंड डबल है, तो दूसरे को डबल में बदल दिया जाएगा।
अन्यथा, यदि कोई ऑपरेंड फ्लोट है, तो दूसरे को फ्लोट में बदल दिया जाएगा।
अन्यथा, अभिन्न पदोन्नति (4.5) दोनों ऑपरेंड पर किया जाएगा ।.54)
फिर, यदि किसी भी ऑपरेंड को लंबे समय तक अनसाइन किया जाता है, तो दूसरे को लंबे समय के लिए बदल दिया जाएगा।
अन्यथा, यदि एक ऑपरेंड एक लंबा इंट और दूसरा अहस्ताक्षरित इंट है, तो यदि एक लंबा इंट एक अहस्ताक्षरित इंट के सभी मूल्यों का प्रतिनिधित्व कर सकता है, तो अहस्ताक्षरित इंट एक लंबे इंट में परिवर्तित हो जाएगा; अन्यथा दोनों ऑपरेंड्स को अहस्ताक्षरित लंबे इंट में परिवर्तित किया जाएगा।
अन्यथा, यदि कोई ऑपरेंड लंबा है, तो दूसरे को लंबे समय तक परिवर्तित किया जाएगा।
अन्यथा, यदि कोई ऑपरेंड अहस्ताक्षरित है, तो अन्य को अहस्ताक्षरित में बदल दिया जाएगा।
4.7 / 2: (एकात्म रूपांतरण)
यदि गंतव्य प्रकार अहस्ताक्षरित है, तो परिणामी मान स्रोत पूर्णांक के लिए कम से कम अहस्ताक्षरित पूर्णांक है (modulo 2 n जहां n बिट्स की संख्या का उपयोग अहस्ताक्षरित प्रकार का प्रतिनिधित्व करने के लिए किया जाता है)। [नोट: एक दो के पूरक प्रतिनिधित्व में, यह रूपांतरण वैचारिक है और बिट पैटर्न में कोई बदलाव नहीं है (यदि कोई छंटनी नहीं है)। ]
EDIT2: MSVC चेतावनी स्तर
MSVC के विभिन्न चेतावनी स्तरों के बारे में चेतावनी दी गई है, ज़ाहिर है, डेवलपर्स द्वारा किए गए विकल्प। जैसा कि मैं इसे देखता हूं, हस्ताक्षरित / अहस्ताक्षरित समानता बनाम अधिक / कम तुलनाओं के संबंध में उनके विकल्प समझ में आते हैं, यह पूरी तरह से निश्चित रूप से विषय है:
-1 == -1
इसका मतलब वही है -1 == (unsigned) -1
- मुझे लगता है कि एक सहज परिणाम है।
-1 < 2
इसका मतलब यह नहीं है -1 < (unsigned) 2
- यह पहली नज़र में कम सहज है, और आईएमओ "पहले" चेतावनी के योग्य है।