ধরুন আমাদের একটি সংখ্যা n আছে। সংখ্যাটি 2 এর শক্তি কিনা তা পরীক্ষা করতে হবে। তাই n =16, তাহলে আউটপুট সত্য হবে, যদি n =12 হয়, তাহলে এটি মিথ্যা হবে।
এটি সমাধান করতে আমরা লজিক্যাল অপারেশন ব্যবহার করব। যদি আমরা দেখি যে সংখ্যা দুটির শক্তি, তাহলে সেই সংখ্যার বাইনারি উপস্থাপনায় MSb হবে 1, এবং অন্য সব বিট হল 0। তাই যদি আমরা [n AND (n – 1)] করি, তাহলে এটি ফিরে আসবে। 0 যদি n হয় 2 এর শক্তি। যদি আমরা বাইনারিতে n =16 =10000 দেখি, (n – 1) =15 =01111 বাইনারিতে, তাহলে 10000 AND 01111 =00000 =0
উদাহরণ (C)
আরো ভালোভাবে বোঝার জন্য নিচের বাস্তবায়নটি দেখি -
#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