乙個數的二進位制表示中1的個數 10

2021-08-09 14:36:16 字數 839 閱讀 3727

實現乙個函式,輸入乙個整數,輸出該數二進位制表示中1的個數。例如,將9表示成二進位制為1001,有2位是1,因此如果輸入數字9,該函式輸出2。

如果讓我們將乙個十進位制的數轉換成二進位制的表示,我們就會不停的模除模除2取它的餘數,因此,就可以用這樣的方法解決:

#include using namespace std;size_t count_one_num(int n)       return count;}int main()       return count;}

除了上面的方法,其實還有一種利用數字的二進位制來解決的辦法:可以想到,當乙個數不為0的時候,它的二進位制表示中至少有乙個1,從而計數器就可以加1,然後就需要將二進位制中的1乙個乙個地剔除掉直到數字變為0,那除了移位怎樣才能辦到呢?可以將數字 =(數字)&(數字-1),因為乙個數字減1的時候,它最低位的乙個1就會變成0,而最低位的1肯定都是0就會都變成1,也就相當於將數字12的二進位制減1就為將1100減1變成了1011值為11,然後將11001011進行相&,那麼就會變成1000,也就是成功的將12中的兩個1變成了乙個1,以此類推就可以統計出二進位制中1的個數了,**實現如下:

size_t count_one_num(int n)       return count;}

這樣的**是不是比前兩種更簡潔直觀呢,只是在理解上要稍微轉一下彎。

《完》本文出自 「敲完**好睡覺zzz」 部落格,請務必保留此出處

求乙個數的二進位制表示中1的個數

原文 實現1 使用按位與和移位操作符,逐位進行統計。需要注意的是,對於有符號的右移操作符號位如何處理是不確定的,因此我們在進行移位操作前要將有符號型轉換為無符號型。int bitcount int n 2 9 m m 1 10 11 12 return count 13 實現2 利用 n n 1 能...

二進位制 求乙個數的二進位制表示中1的個數

題目 求乙個正整數x中1的個數 思考 二進位制是乙個01串。統計該串中1的個數。方法1 將x按照樸素的方法轉化成二進位制串,如果x的某二進位制位上為1,則res 求得最後x中1的個數。int x while x return res res即是x的二進位制數中1的個數用這種方法求,時間複雜度為o n...

如何求乙個數的二進位制表示中1的個數

求乙個數的二進位制中1的個數方法很多,在這裡我總結最近學到的兩種簡單好用的方法 1 簡單法 由於右移運算子的特性,每向右移動一位,相當於二進位制的最低位就被消除高位補零,其功能相當於該數每次除以2。利用上述原理,每次讓二進位制的最低位和1進行與運算.若該位是1,則記一次數.然後右移1位 繼續上述運算...