統計乙個數的二進位制表示0和1個數的方法

2021-10-03 13:54:19 字數 1119 閱讀 3578

這幾天一直在牛客上刷筆試題,遇到了兩個題,乙個題是怎麼用二進位制表示0的方法,另乙個是怎麼用二進位制表示1的方法,二話不說先上總結:

先上**

int func(int x)

return count;

}

假設int是佔4個位元組的,為了使運算方便,我只寫4位

當x=6,求count執行的次數?(求6的二進位制中1的個數)

①分析:當x=6時

6的二進位制 0110

5的二進位制 0101

6&5與運算 0100

0100的十進位制是4

②當x=4時

4的二進位制 0100

3的二進位制 0010

4&3與運算 0000

③x=0 迴圈結束

很顯然count執行了兩次

綜上由**分析可得:x=x&(x-1);的作用是每次迴圈把x的二進位制數從右往左數的最後一位變成0,直到變成全0的時候,迴圈結束。

總結:x&(x-1) 的作用是對乙個數中二進位制1的個數進行統計

先上**:

int

fun(

unsigned

int x)

return n;

}

假設int是佔4個位元組的,為了使運算方便,我只寫4位

當x=6時,求n執行的次數?(求6的二進位制數中0的個數)

①分析:當x=6時

6的二進位制 0110

7的二進位制 0111

6|7或運算 0111

0111的十進位制是7

②當x=7時

7的二進位制 0111

8的二進位制 1111

7|8或運算 1111

③1111+0001 =0000 發生了溢位現象 x+1=0 程式退出

很顯然n執行了兩次

綜上**分析可得:x=x|(x+1);的作用是每次迴圈把x的二進位制中從右往左數的最後一位0變成1,直到變成全1的時候x+1就溢位為全0,迴圈結束。

總結:x|(x+1) 的作用是對乙個數中二進位制0的個數進行統計

二進位制 求乙個數的二進位制表示中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 使用按位與和移位操作符,逐位進行統計。需要注意的是,對於有符號的右移操作符號位如何處理是不確定的,因此我們在進行移位操作前要將有符號型轉換為無符號型。int bitcount int n 2 9 m m 1 10 11 12 return count 13 實現2 利用 n n 1 能...

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

實現乙個函式,輸入乙個整數,輸出該數二進位制表示中1的個數。例如,將9表示成二進位制為1001,有2位是1,因此如果輸入數字9,該函式輸出2。如果讓我們將乙個十進位制的數轉換成二進位制的表示,我們就會不停的模除模除2取它的餘數,因此,就可以用這樣的方法解決 include using namespa...