2012-03-29 4 views
7

में कास्ट ऑपरेशन प्राथमिकता सी # में महत्वपूर्ण अंतर क्या मायने रखता है?सी #

int a, b; 
double result; 
result = (double)a/b; 
result = a/(double)b; 
result = (double)a/(double)b; 

आप किस का उपयोग करते हैं?

+0

बस सुनिश्चित करें कि आप 'परिणाम = (डबल) (ए/बी) का उपयोग नहीं करते हैं; ' –

+0

इनमें से कोई भी आवश्यक नहीं है। 'ए' और' बी' पहले से ही युगल हैं। परिणाम चर एक डबल है। एकमात्र चीज जो दोहरी नहीं होगी, दो युगल का विभाजन परिणाम है। अगर मुझे गलत नहीं लगता है तो इस तरह के मामले में एक पूर्णांक से डॉउल तक प्राकृतिक कास्टिंग होता है। –

+1

@ रामहाउंड 'ए' और 'बी' पूर्णांक हैं, युगल नहीं। 'परिणाम = ए/बी' करने के परिणामस्वरूप एक पूर्णांक विभाजन होगा, फिर एक कास्ट डबल में होगा। – Msonic

उत्तर

10

कास्ट विभाजन से पहले होगा।

आपके उदाहरणों में, इससे कोई फर्क नहीं पड़ता कि आप एक ऐसा ऑपरेटर करते हैं जैसे एक ऑपरेंड डबल होता है, रनटाइम दूसरे को भी डबल/कन्वर्ट करेगा।

यह माइक्रो-ऑप्टिमाइज़ेशन की तरह दिखता है - इसके बारे में चिंतित या व्यवहार करने के लायक कुछ नहीं जब तक कि माप यह दिखाए कि यह वास्तव में एक बाधा है।

+0

मेरी मुख्य चिंता गणना के अंत में सटीक है। मुझे डर था कि जो भी मैं कास्ट करना चुनता हूं (पहला, स्पष्ट रूप से) एक फर्क पड़ता है। लेकिन चूंकि आप कहते हैं कि आंतरिक लोग उनमें से सभी को फेंक देंगे, मैं आप पर भरोसा रखूंगा। – Jake

+0

@ जेक - ट्रस्ट, लेकिन सत्यापित करें ... यह ऐसा कुछ है जिसे आप अपने आप पर _easily_ परीक्षण कर सकते हैं (केवल एक छोटा सा एप्लीकेशन लिखें जो विभिन्न प्रकार की गणना करता है)। – Oded

+1

वास्तव में, छोटा आवेदन कुछ भी साबित नहीं करेगा। टेस्ट ऑपरेंड का एक छोटा सबसेट सभी संभावित संचालन के परिणाम का प्रतिनिधित्व नहीं कर सकता है, जब तक कि यह पहली बार निर्धारित नहीं किया जाता है कि इसे इस तरह कार्यान्वित किया जाता है। इसलिए मुझे यह सवाल पूछना पड़ा। – Jake

2

मैं यह कर:

result = (double)a/(double)b; 

यह सख्ती से अनावश्यक हो सकता है, लेकिन आम तौर पर मैं यकीन बनाने के लिए है कि यह पूर्णांक विभाजन से काम नहीं चलेगा चाहते हैं, और मैं वास्तव में विशिष्ट नियमों को याद करने की परवाह नहीं है इस परिदृश्य के लिए, इसलिए यह आसान है (यदि कुछ और कीस्ट्रोक) स्पष्ट होने के लिए।

+0

असल में मैं यह कर रहा हूं * क्योंकि * मैं विशिष्टताओं को याद रखने के लिए परेशान नहीं हूं। लेकिन मैं अपनी आलसी आदतों को बदलने का फैसला करता हूं, इसलिए मैंने इस सवाल से पूछा। (बीटीडब्ल्यू, मैंने आपको नहीं दिया -1) – Jake

+0

@ जेके आलसी आदतों को रोकने की कोशिश कर रहा है! :) –

0

मैं (double)a/b करता हूं क्योंकि मुझे लगता है कि एक चट्टान या किसी चीज की तरह कुछ अविभाज्य होना है। जब एक डबल के लिए डाला जाता है तो यह एक केक की तरह विभाजित हो जाता है। आप चार हिस्सों में 3.0 केक विभाजित कर सकते हैं, लेकिन आप 4.0 हिस्सों में तीन चट्टानों को विभाजित नहीं कर सकते हैं। या कुछ और। कोई समझदारी करो?