題目:比如給個5,5二進位制為101,有兩個1因此輸出2.
很多人都會覺得簡單寫出以下程式
int count_one_bits(int n)
return count; }
但是這個**是有問題的,
如果給出的數是負數,則進行算數移為,就會進入死迴圈。怎樣解決呢?
把上面這個方法改進,每個整數都有32位,分別將這些位與1按位與,如果為真,則count++
int count_one_bits(int t)
t = t >> 1; }
return count; }
但是這個是很麻煩的,對於每乙個數都要判斷32位
接下來我們看下如下例子
8 & 7 = 0
1000 0111 000
5 & 4 = 4
101 100 100
可以發現n&(n-1)的結果與n相比,其二進位制中1個數少了一位,根據這種規律我們給如下**
int count_one_bits(int n)
return count; }
求乙個數的二進位制數中1的個數
求乙個數的二進位制數種1的個數 author administrator public class countoneinbinarynum num 2 system.out.println count 解法2 將解法一的除法變為位移運算 public void z2 1 method2 int nu...
二進位制 求乙個數的二進位制表示中1的個數
題目 求乙個正整數x中1的個數 思考 二進位制是乙個01串。統計該串中1的個數。方法1 將x按照樸素的方法轉化成二進位制串,如果x的某二進位制位上為1,則res 求得最後x中1的個數。int x while x return res res即是x的二進位制數中1的個數用這種方法求,時間複雜度為o n...
求二進位制數中1的個數
解法一 可以舉乙個八位的二進位制例子來進行分析。對於二進位制操作,我們知道,除以乙個2,原來的數字將會減少乙個0。如果除的過程中有餘,那麼就表示當前位置有乙個1。以10 100 010為例 第一次除以2時,商為1 010 001,余為0。第二次除以2時,商為101 000,余為1。因此,可以考慮利用...