if ((num ^ (num - 1)) > num)
cout << "yes" << endl;
else
cout << "no" << endl;
הסבר קטן:
בואו ניקח לדוגמא את המספר 4 בייצוג הבינארי שלו:
00100
ריפדתי אותו באפסים משמאל, סתם בשביל הנוחות.
עכשיו, נפחית ממנו אחד, ונקבל את הייצוג הבינארי של 3:
00011
כמו שניתן לשים לב, אם לוקחים מספר שהוא חזקה של שניים ומחסירים ממנו אחד, כל הביטים מימין לmsb יהיו דלוקים.
עכשיו, נבצע פעולת xor על שני המספרים, 4 ו3:
00111
קיבלנו מספר שגדול יותר מארבע, המספר ההתחלתי. זה יקרה רק כאשר המספר ההתחלתי יהיה חזקה של 2, משום שאחרת, הmsb יהיה דלוק בשני המקרים ונקבל תוצאה קטנה יותר.
זה הכל. 
הערה קטנה: השיטה הזאת תקבל גם את המספר 0 בתור חזקה של שתיים. אם לא רוצים את זה, אפשר להוסיף תנאי פשוט: && num.