मान लीजिए कि हमारे पास एक संख्या n है। हमें यह जांचना है कि संख्या 2 की घात है या नहीं। तो n =16 है, तो आउटपुट सत्य होगा, यदि n =12, तो यह असत्य होगा।
इसे हल करने के लिए हम लॉजिकल ऑपरेशंस का उपयोग करेंगे। यदि हम उन संख्याओं को देखते हैं जो दो की शक्ति हैं तो उस संख्या के द्विआधारी प्रतिनिधित्व में एमएसबी 1 होगा, और अन्य सभी बिट्स 0 हैं। इसलिए यदि हम [एन और (एन -1)] करते हैं, तो यह वापस आ जाएगा 0 यदि n 2 की शक्ति है। यदि हम बाइनरी में n =16 =10000, (n - 1) =15 =01111 बाइनरी में देखते हैं, तो 10000 और 01111 =00000 =0
उदाहरण (सी)
आइए एक बेहतर समझ प्राप्त करने के लिए निम्नलिखित कार्यान्वयन देखें -
#include <stdio.h> #include <math.h> #define MAX 20 bool isPowerOfTwo(int n){ return(n>0 && !(n & (n-1))); } int main() { printf("%s\n", isPowerOfTwo(16) ? "true" : "false"); printf("%s\n", isPowerOfTwo(12) ? "true" : "false"); printf("%s\n", isPowerOfTwo(1) ? "true" : "false"); printf("%s\n", isPowerOfTwo(32) ? "true" : "false"); printf("\n"); }
इनपुट
16 12 1 32
आउटपुट
true false true true