#33331: 位元運算解題方法


k0905920491@gmail.com (魚( ´•̥ו̥` ))

學校 : 國立新竹高級工業職業學校
編號 : 136251
來源 : [120.126.77.9]
最後登入時間 :
2025-05-17 17:20:41

只要 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");
        }
    }
}