一語句實現x是否為2的若干次冪的判斷
#define is2*n(x) ((x & (x - 1))? 0 : 1)
int main(void)
{
int m = 512;
cout << ((m & (m - 1)) ? false : true) << endl;
//即當m中只有一位為1時,才為若干次冪值
//若有兩個及以上1,則(m & (m - 1))不為0,輸出0,表示不為2的若干次冪
return(0);
}
類比:x為2的若干次冪即表示x中1的位數為1,題目轉化為求一個32位數中1的位數,如果為1,則表示該數為2的若干次冪
同理也可以利用此規則求一個32位數中1的位數, (m & (m - 1)每次可用消除一個1,計算的次數即為1的個數
摘自 飛奔蝸牛的Linux之旅。。。