只要 n == n&(-n)就是2的次方
例如n = 2 (10) , -n=(10) , 兩個取AND(&)後還是(10)
再舉例n=32(1000000) , -n=(1000000) , 兩個取AND(&)還是(1000000)
再再舉例n=17(10001) , -n=(01111),兩個取AND(&)就變(00001) ,
所以只有n是2的次方,n&(-n)才會=n
最後記得例外 0 因為0=(0000),-0=(0000) , (0000)AND(0000)=(0000)
附上程式碼片段
#include <標頭自己填>
int main(){
int n=0;
while(輸入自己填){
if(n == (n&(-n)) && n!=0){
printf("輸出自己填\n");
}else{
printf("輸出自己填\n");
}
}
}