2011-03-05 12 views
5

संभावित डुप्लिकेट है:का मूल्यांकन करके पता पूर्णांक पॉट (दो की शक्ति)

bool isPOT(int x); 

:
Query about working out whether number is a power of 2
How to check if a number is a power of 2

मैं इस प्रोटोटाइप के लिए एक समारोह शरीर की आवश्यकता होती है तो यह वापस आएगा जैसे आईएसपीओटी (3) = गलत, लेकिन आईएसपीओटी (8) = टीआर यूई

सबसे सुंदर/संक्षिप्त एल्गोरिदम क्या है? और सबसे कुशल क्या है?

पीएस: मुझे आश्चर्य है कि मुझे इस सवाल को SO पर नहीं मिल रहा है, इसलिए मैं पूरी तरह से किसी को कुछ डुप्लिकेट का पता लगाने की उम्मीद कर रहा हूं।

पीपीएस: क्या कोई कृपया पीओटी, एनपीओटी, पावर ऑफ टू टैग बना सकता है?

+1

हाँ, वहाँ कई डुप्लिकेट हैं, उदा [काम करने के बारे में पूछें कि संख्या 2 की शक्ति है या नहीं) (http://stackoverflow.com/questions/666647/query-about-working-out-whether-number-is-a-power-of-2) –

+1

क्यों क्या दो शक्तियों की शक्ति की आवश्यकता होगी? – user470379

+0

अजीब बात है कि मुझे शीर्षक टाइप करने से कोई मैच नहीं मिला, मुझे लगता है क्योंकि मैंने '2' –

उत्तर

12
bool IsPOT(int x) 
{ 
    return (x > 0) && ((x & (x - 1)) == 0); 
} 
+1

कोई इसे मैक्रो फॉर्म में फिर से लिखना चाहता है, ताकि यह किसी भी प्रकार के पूर्णांक # परिभाषित ISPOW2 (x) ((x)> 0 &&! ((X) और ((x) - 1)) – datenwolf

+3

@ डेटनवॉल्फ: आप को छोड़कर मैक्रोज़ के साथ सभी सामान्य समस्याएं प्राप्त करें - यह शायद एक इंट फ़ंक्शन के रूप में रखने के लिए बेहतर है, जो चार, लघु और int को संभालेगा, और फिर एक अतिरिक्त संस्करण करें यदि आपको किसी int से अधिक व्यापक संभाल करने की आवश्यकता है। –

6

नहीं जानते कि क्या इस सटीक सवाल हुई, लेकिन जांच के लिए आसान है

x & (x - 1) == 0 
+3

लगभग - आपको x> 0 की जांच करने की भी आवश्यकता है, अन्यथा आपको गलत परिणाम मिलता है जब 'x = 0'। –

+0

@PaulR अच्छा बिंदु। –

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