1. 程式人生 > >統計一個整數的二進位制中1的個數的三種解法

統計一個整數的二進位制中1的個數的三種解法

一、每一位與0x1進行與運算

  1. int countOne(int num)  
  2. {  
  3.     int count = 0;  
  4.     while ( num )  
  5.     {  
  6.         if( num & 1 ){  
  7.             ++count;  
  8.         }  
  9.         num >>= 1;  
  10.     }  
  11.     return count;  
  12. }  
二、//原理:一個數減去1,則這個數的二進位制數中最後一個1及其後的數字取反。x & (x - 1) 為它的二進位制數中少一個1
  1. int countOne2(
    int num)  
  2. {  
  3.     int count = 0;  
  4.     while ( num )  
  5.     {  
  6.         num &= (num - 1) ;  
  7.         ++count;      
  8.     }  
  9.     return count;  
  10. }  
三、查表法,將有限個數的對應的1的個數存在一個數組中,查表的時間複雜度為O(1),但是空間複雜度較大.
  1. int countOne3(int num)  
  2. {  
  3.     // 列舉了0到15 的表 
  4.     int countTable[16] = {  
  5.         0,1,1,2,  
  6.         1,2,2,3,  
  7.         1,2,2,3,  
  8.         2,3,3,4  
  9.     };    
  10.     if( num > MAX_SIZE && num < 0 ){  
  11.         return -1;  
  12.     }  
  13.     return countTable[num];  
  14. }