पहली शर्त 0 से बाहर है, जो स्पष्ट रूप से 4 की शक्ति नहीं है लेकिन गलत तरीके से निम्नलिखित दो परीक्षणों को पारित करेगी। (संपादित करें: नहीं, यह इंगित नहीं किया जाएगा। पहला परीक्षण अनावश्यक है।)
अगला वाला एक अच्छा चाल है: यह सही होता है यदि केवल और यदि संख्या 2 की शक्ति है। दो की शक्ति केवल एक बिट सेट होने के द्वारा विशेषता है। एक बिट सेट के साथ एक संख्या शून्य से एक परिणाम में उस बिट के पिछले सभी बिट्स के साथ एक संख्या में परिणाम (यानी 0x1000 शून्य एक 0x0111 है)। और उन दो संख्याओं, और आप 0 प्राप्त करते हैं। किसी भी अन्य मामले में (यानी 2 की शक्ति नहीं), कम से कम एक बिट होगा जो ओवरलैप हो जाएगा।
तो इस बिंदु पर, हम जानते हैं कि यह 2.
x & 0x55555555
रिटर्न गैर शून्य (= सच) यदि कोई भी थोड़ा यह सेट (बिट 0, थोड़ा 2, बिट 4, थोड़ा 6, आदि की एक शक्ति है)। इसका मतलब है कि यह 4 की शक्ति है। (यानी 2 पास नहीं होता है, लेकिन 4 पास, 8 पास नहीं होता है, 16 पास, इत्यादि)।
x और (x - 1) किसी संख्या से सबसे कम 1 बिट हटा देता है। – starblue