這幾天一直在牛客上刷筆試題,遇到了兩個題,乙個題是怎麼用二進位制表示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...