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

2021-08-14 23:12:27 字數 606 閱讀 6624

題目:比如給個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。因此,可以考慮利用...