2011-01-07 7 views
5

हालांकि यह C++ लोगों के लिए आसान होना चाहिए। लेकिन मुझे पूछा गया कि सी # में इसे कैसे किया जाए। बहुत अंतर नहीं होना चाहिए।सी #। बिट ऑपरेशंस के साथ तार्किक पहेली। केवल एक बिट सेट है?

एक लंबी चर के केवल एक बिट सेट के बारे में कैसे पता लगाना है?

मैं कुछ क्रूर बल को छोड़कर कुछ बिट्स को छोड़कर और सेट्स की गिनती को छोड़कर कुछ भी नहीं सोच सकता।

उत्तर

19

एक गैर-नकारात्मक बाइनरी पूर्णांक मान x 2 की शक्ति है यदि (x&(x-1)) 2 के पूरक अंकगणितीय का उपयोग कर 0 है।

2 की शक्तियों का मतलब एक बिट सेट होगा।

http://aggregate.org/MAGIC/#Is%20Power%20of%202

संपादित करें:

शून्य मामले के लिए अनुमति देने के लिए:

bool singleBit = x>0 && (x&(x-1))==0 
+0

: हे यह मेरे थोड़ी देर कोडिंग पहले की तर्ज के दसियों को सहेज लिया है होता! विश्वास नहीं कर सकता मैं इसके बारे में सोच नहीं सकता, +1 !! :) – Mehrdad

+0

लिंक किया गया पृष्ठ मेरे पसंदीदा में से एक है। बुकमार्किंग के लायक – spender

+0

यह x = 0 के लिए काम नहीं करता है, आपको इसके लिए भी जांच करनी होगी। – Timbo

3

C++ में:

unsigned long v; 
bool f; // result 
f = v && !(v & (v - 1)); 

स्पष्टीकरण: वी & (V - 1) == 0 अगर केवल एक बिट सेट है या v == 0.

0

बस PHP में इसे करने की कोशिश:

$singleBit = $bits && !($bits & ($bits - 1)); 
संबंधित मुद्दे