首先,2的幂特征:
1,2,4,8,16…
二进制即0001,0010,0100,1000…
所以,
bool is2power(int num){
return (num>0) && (num&(num-1)) == 0 && (num & 0x11111111);
}
同理,4的幂特征:
1,4,16,64…
二进制即0001,0100,10000,…
所以:
bool is4power(int num){
return (num>0) && (num&(num-1)) == 0 && (num & 0x55555555);
}