usual arithmetic conversions नामक रूपांतरणों का एक सेट है जिसका उपयोग अधिकांश अंकगणितीय ऑपरेटरों के मूल्यांकन से पहले किया जाता है।
असल में, तुम वहाँ पर विचार कर सकते पूर्णांकों पर गणित के लिए कुछ नियम होने के लिए:
पहले, पूर्णांक गणित, ऑपरेंड int
"की तुलना में छोटे" के साथ प्रदर्शन कभी नहीं है short * signed char
, दोनों के मामले में तो short
और signed char
ऑपरेटरों को int
पर पदोन्नत किया जाता है, दो int
मान गुणा किए जाते हैं, और फिर परिणाम int
होता है।
दूसरा, यदि एक या दोनों प्रकार int
से बड़े हैं, तो संकलक एक प्रकार का चयन करता है जो कम से कम "जितना बड़ा" सबसे बड़ा ऑपरेंड के प्रकार के रूप में होता है। इसलिए, यदि आपके पास long * int
है, तो int
को long
पर प्रचारित किया गया है और परिणाम long
है।
तीसरा, यदि कोई ऑपरेंड unsigned
है, तो परिणाम हस्ताक्षरित है। इसलिए, यदि आपके पास long * unsigned int
है, तो long
और unsigned int
दोनों को unsigned long
पर प्रचारित किया गया है और परिणाम unsigned long
है।
या तो संकार्य बिंदु प्रकार चल गया है, तो चल बिन्दु गणित किया जाता है: float
, double
, या long double
प्रयोग किया जाता है (जो एक ऑपरेंड के प्रकार पर निर्भर करता है, परिणाम प्रकार का निर्धारण किया जाता पूर्ण तालिका इस उत्तर की शुरुआत में जुड़े पेज पर पाया जा सकता है)।
ध्यान दें कि परिणाम प्रकार ऑपरेटरों के मूल्य पर निर्भर नहीं है। मानों को ज्ञात होने से पहले संकलन समय पर कंपाइलर द्वारा प्रकार का चयन किया जाना चाहिए।
यदि s * i * i
का परिणाम परिणाम प्रकार (int
, आपके परिदृश्य में) से बाहर है, तो आप भाग्य से बाहर हैं: आपका प्रोग्राम रनटाइम पर निर्णय नहीं ले सकता है, "ओह, मुझे उपयोग पर स्विच करना चाहिए एक long
! " क्योंकि परिणाम प्रकार को संकलन समय पर चुना जाना था।
स्रोत
2011-03-15 21:44:03
धन्यवाद, अच्छा जवाब। – user3234