#33331: 位元運算解題方法


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

學校 : 國立新竹高級工業職業學校
編號 : 136251
來源 : [114.42.38.77]
最後登入時間 :
2023-11-26 13:34:19
e284. 放暑假了!!!!! -- π | From: [114.36.25.77] | 發表日期 : 2022-12-25 12:24

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

 
ZeroJudge Forum