2011-03-31 8 views
11

मुझे यकीन है कि यह उतना मुश्किल नहीं है जितना मैं इसे बाहर कर रहा हूं।सी # में 2 की पूर्ण शक्तियों की गणना करने का आसान तरीका?

Math.Pow(double, double) के बराबर कुछ का उपयोग करना चाहते हैं लेकिन एक पूर्णांक आउटपुट करना चाहते हैं। मैं फ्लोटिंग पॉइंट्स के साथ राउंडऑफ त्रुटियों के बारे में चिंतित हूं।

सबसे अच्छा मैं के साथ आ सकता है:

uint myPower = 12; 
uint myPowerOfTwo = (uint)Math.Pow(2.0, (double)myPower); 

मैं इस बारे में सोचा:

uint myPowerOfTwo = 1 << myPower; // doesn't work 

लेकिन मैं त्रुटि है कि ऑपरेटर "< <" प्रकार के ऑपरेंड के साथ नहीं किया जा सकता मिल int या और uint।

कोई सुझाव? हमेशा के रूप में धन्यवाद।

उत्तर

27

आप पारी ऑपरेटर के दूसरे संकार्य के लिए एक हस्ताक्षरित पूर्णांक (दाहिने हाथ की ओर) का उपयोग करना होगा:

int myPower = 12; 
int myPowerOfTwo = 1 << myPower; 
बेशक

आप इस तरह के uint के रूप में एक और संख्यात्मक प्रकार के परिणाम डाली कर सकते हैं:

uint myPowerOfTwo = (uint) (1 << myPower); 
MSDN से

:

बाएं पारी ऑपरेटर (< +०१२३८७०३९५४२) शिफ्ट करता है इसका पहला ऑपरेंड द्वारा छोड़ा गया बिट्स के दूसरे ऑपरेंड द्वारा निर्दिष्ट किया गया है। दूसरे ऑपरेंड का प्रकार int होना चाहिए।

+0

ठीक है, ऐसा लगता है कि काम करता है! लेकिन त्रुटि संदेश क्यों ऑपरेटर "<<" का उपयोग int int या uint के संचालन के साथ नहीं किया जा सकता है? क्या मैंने सिर्फ एक int का उपयोग नहीं किया? – John

+0

(ओपी के लिए) और यदि आवश्यक हो तो अंतिम चरण के रूप में पेश करें –

+3

@ जॉन क्या आपको यकीन है कि यह * और * नहीं कहता है? मतलब: संयोजन? –

2

अगर आप एक्सटेंशन/स्थिर विधि बनाने हैं, तो यह आसान लगता है और बाद में किसी भी त्रुटि को दूर करने के होगा और अनुकूलक अभी भी यह इनलाइन होगा:

:

public static uint Exp2(this uint exponent) { 
    return (uint)Math.Pow(2.0, (double)exponent); 
} 

तो फिर तुम जैसे उपयोग कर सकते हैं

uint myPowerOfTwo = myPower.Exp2(); 
संबंधित मुद्दे

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