2010-04-15 11 views
5

6.3.1.8p1: अन्यथा, पूर्णांक प्रचार दोनों ऑपरेटरों पर प्रदर्शन किया जाता है। फिर निम्नलिखित नियम प्रचारित ऑपरेंड पर लागू होते हैं: यदि दोनों ऑपरेटरों के पास प्रकार है, तो आगे रूपांतरण की आवश्यकता नहीं है। अन्यथा, यदि दोनों ऑपरेटरों ने पूर्णांक प्रकारों पर हस्ताक्षर किए हैं या दोनों में हस्ताक्षर किए गए पूर्णांक प्रकार हैं, तो कम पूर्णांक रूपांतरण रैंक के प्रकार के साथ ऑपरेंड को अधिक रैंक वाले ऑपरेंड के प्रकार में परिवर्तित किया जाता है। अन्यथा, यदि ऑपरेंड जिसमें पूर्णांक प्रकार को हस्ताक्षर नहीं किया गया है, तो अन्य ऑपरेंड, के प्रकार के रैंक के बराबर या बराबर रैंक है, तो हस्ताक्षरित पूर्णांक प्रकार के साथ ऑपरेंड को बिना हस्ताक्षरित पूर्णांक प्रकार के ऑपरेंड के प्रकार में परिवर्तित किया जाता है। अन्यथा, यदि हस्ताक्षरित पूर्णांक प्रकार वाले ऑपरेंड का प्रकार अप्रमाणित पूर्णांक प्रकार के साथ ऑपरेंड के प्रकार के सभी मानों का प्रतिनिधित्व कर सकता है, तो हस्ताक्षरित पूर्णांक प्रकार के साथ ऑपरेंड को हस्ताक्षर पूर्णांक प्रकार के साथ ऑपरेंड के प्रकार में परिवर्तित किया जाता है । अन्यथा, दोनों ऑपरेटरों को हस्ताक्षरित पूर्णांक प्रकार के साथ ऑपरेंड के प्रकार से संबंधित हस्ताक्षरित पूर्णांक प्रकार में परिवर्तित कर दिया जाता है।सी में अंतिम पूर्णांक पदोन्नति नियम कभी भी कैसे लागू होता है?

बोल्ड शासन लागू होने के लिए यह मतलब है कि आप एक अहस्ताक्षरित पूर्णांक प्रकार जो रैंक है पर हस्ताक्षर किए पूर्णांक प्रकार की तुलना में कम और पर हस्ताक्षर किए पूर्णांक प्रकार सभी को रोक नहीं सकते है की आवश्यकता प्रतीत होता है हस्ताक्षरित पूर्णांक प्रकार के मान।

क्या इस तरह के मामले का वास्तविक दुनिया उदाहरण है या क्या यह कथन सभी संभावित क्रमिकताओं को कवर करने के लिए कैच-सब के रूप में कार्य करता है?

उत्तर

5

यदि आपके पास एक मंच था जहां sizeof(long int)==sizeof(int), तो signed long int और unsigned int इस नियम में आ जाएगा। किसी भी मामले में, मानक यह निर्धारित नहीं करता है कि रूपांतरण रैंक आकार के बराबर है, केवल वह रूपांतरण रैंक एक आदेश प्रदान करता है जो आकार पर वैध क्रम है (6.3.1.1.p1.1 (एसपी?)):

कोई भी दो हस्ताक्षरित पूर्णांक प्रकारों का एक ही रैंक नहीं होगा, भले ही उनके पास प्रतिनिधित्व हो।

+1

इस मामले में, 'लम्बी' में 'हस्ताक्षरित int' से अधिक रैंक है, लेकिन इसके सभी मानों का प्रतिनिधित्व नहीं कर सकता है, इसलिए दोनों ऑपरेटरों को 'हस्ताक्षरित लंबे' में परिवर्तित कर दिया जाता है। जिसका अर्थ है कि, उदाहरण के लिए, '-1 एल * 1 यू' एक बड़ी सकारात्मक संख्या होगी। – caf

संबंधित मुद्दे