2011-04-25 10 views
8

मुझे यकीन है कि सी ++ विभाजन की वापसी प्रकार की मेरी समझ,सी ++ - विभाजन का प्रकार?

int/int => return is int? 

float/float => return is which type? float? 

double /double => return is double? 

int/double => return is double? 

int/float => return is float? 

कृपया मुझे सही कर अगर मैं गलत हूँ बनाना चाहते हैं।

धन्यवाद

उत्तर

8

ये सभी सही हैं।यहां बताया गया है कि सी ++ 03 मानक कहता है (§5/9):

कई बाइनरी ऑपरेटर जो अंकगणित या गणना प्रकार के संचालन की अपेक्षा करते हैं रूपांतरण और उपज परिणाम प्रकार इसी तरह से होते हैं। इसका उद्देश्य एक आम प्रकार पैदा करना है, जो परिणाम का भी प्रकार है। या तो संकार्य प्रकार long double की है

  • हैं, तो अन्य long double करने के लिए परिवर्तित किया जाएगा: इस प्रकार यह पैटर्न सामान्य गणित रूपांतरण, जो परिभाषित कर रहे हैं कहा जाता है।
  • अन्यथा, यदि ऑपरेंड double है, तो दूसरा double में परिवर्तित हो जाएगा।
  • अन्यथा, यदि ऑपरेंड float है, तो दूसरा float में परिवर्तित हो जाएगा।
  • अन्यथा, अभिन्न प्रचार (4.5) दोनों ऑपरेटरों पर किया जाएगा।
  • फिर, यदि कोई ऑपरेंड unsigned long है तो दूसरा unsigned long में परिवर्तित हो जाएगा।
  • अन्यथा, यदि एक संकार्य एक long int और अन्य unsigned int है, तो अगर एक long int एक unsigned int के सभी मूल्यों का प्रतिनिधित्व कर सकते हैं, unsigned int एक long int करने के लिए परिवर्तित किया जाएगा; अन्यथा दोनों ऑपरेटरों को unsigned long int में परिवर्तित कर दिया जाएगा।
  • अन्यथा, यदि ऑपरेंड long है, तो दूसरा long में परिवर्तित हो जाएगा।
  • अन्यथा, यदि ऑपरेंड unsigned है, तो दूसरा unsigned में परिवर्तित हो जाएगा।

[नोट: अन्यथा, केवल शेष मामला है कि दोनों ऑपरेंड int हैं]

1

आप सभी मामलों में सही हैं। कम से कम एक फ़्लोटिंग पॉइंट प्रकार से जुड़े संचालन के नियम यह हैं कि यदि कोई भी प्रकार long double है, तो परिणाम long double है; अन्यथा, यदि कोई भी प्रकार double है तो परिणाम double है अन्यथा परिणाम float है।

दो int के बीच अंकगणितीय परिचालन int परिणाम उत्पन्न करते हैं।

अन्य प्रकारों के बीच नियम थोड़ा अधिक जटिल हैं और कार्यान्वयन पर निर्भर हो सकते हैं; लगभग सभी परिचालनों के पूर्णांक प्रचार का मतलब है कि ऑपरेटरों को कम से कम int आकार के प्रकारों को कम से कम int आकार के परिणाम का उत्पादन करने के लिए प्रोत्साहित किया जाता है।

1

केवल तीन प्रकार (float, double और int) को ध्यान में रखते:

  • तो संकार्य के किसी भी double है, तो परिणाम double हो जाएगा।
  • अन्य यदि कोई ऑपरेंड float है, तो परिणाम float होगा।
  • अन्यथा परिणाम int होगा।
+1

कि दूसरी गोली एक "यदि किसी और" करने का इरादा है? किसी भी तरह से, पहले दो गोलियों का क्रम पीछे की ओर है, और आप लंबे समय तक भूल गए हैं। –

+0

@Eric: अच्छा बिंदु। इसे संपादित किया – Nawaz

0

परिणाम असाइनमेंट के लिए टाइप किया जाएगा (अगर नियम मौजूद है)। यदि आपके पास int x = dY + iZ; है तो पदोन्नति अतिरिक्त परिणाम डबल होने का कारण बनती है, लेकिन इसे x को असाइन किए जाने पर इसे एक int में परिवर्तित कर दिया जाएगा। अधिक जानकारी के लिए Google "सी ++ में परिवर्तनीय प्रचार"।

4

operator/ मूल डेटा प्रकारों के लिए (जैसे अधिकांश, यदि नहीं, तो मूल प्रकार के ऑपरेटरों) अपने दो ऑपरेटरों का सबसे मजबूत प्रकार देता है।

इस प्रकार आपके सभी प्रश्नों का उत्तर हां है।


सामान्य तौर पर, चल बिन्दु प्रकार पूर्णांक लोगों की तुलना में मजबूत कर रहे हैं और अहस्ताक्षरित पर हस्ताक्षर किए की तुलना में मजबूत कर रहे हैं ...

डिफाइनिंग> "की तुलना में मजबूत", हम कह सकते हैं के रूप में:

लंबे डबल > डबल> फ्लोट> हस्ताक्षरित लंबा> लंबा> हस्ताक्षरित int> int> unsigned छोटा> छोटा> हस्ताक्षरित चार> char

+0

क्या आप वाकई 'हस्ताक्षरित टी' और 'टी' ऑर्डर के बाहर नहीं हैं? –

+0

@ क्रिस ए: हम्म, हाँ। 'हस्ताक्षरित टी'' टी' से अधिक मजबूत है। @ildjarn जवाब भी देखें। – peoro

+0

धन्यवाद, मैंने कुछ सीखा। +1 –

0

किसी भी परिदृश्य में, सी ++ में, काफी हद तक बोलते हुए, दोनों ऑपरेटरों को "सबसे बड़ा" प्रकार में परिवर्तित कर दिया जाता है ऑपरेशन से पहले दो ऑपरेटरों के प्रकार exe है cuted। एमएसडीएन Standard Arithmetic Conversions देखें।

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