求二進制數中有多少個1


求一個 n 位的整數的二進制表式中有x個 1。

  • 樣例:給定 32 (100000),返回 1;給定 5 (101),返回 2;給定 1023 (111111111),返回 9

  • 解決方法:num & (num-1) 可以每次將最右邊的1消去,經過x次運算即可。

  • 原理:分類討論、歸納總結

int countBit(int num){
    int count = 0;
    while(num != 0){
   	 num = num & (num-1);
    	 count++;
    }
    return count;
}

判斷一個數的二進制數里面1的個數的奇偶性,偶數返回0,奇數返回1。

  • 樣例:給定 32 (100000),返回 1;給定 5 (101),返回 0;給定 1023 (111111111),返回 1
  • 異或運算有如下規律,加上異或表判斷即可。
  1. a^b = b^a
  2. a ^ b ^ c = a ^ (b ^ c) = (a ^ b) ^ c
  3. d = a ^ b ^ c 可以推出 a = d ^ b ^ c
  4. aba = b

C語言代碼如下(關注點在val最低位的變化)

int odd(int x){
    int val = 0;
    while(x){
        val ^= x;
        x >>= 1;
    }
    return val & 0x1;
}


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM