求二進位制數中有多少個1

2022-03-21 19:40:11 字數 953 閱讀 6664

演算法函式**:

1

int bit_count_one(unsigned intn)2

下面我們來詳細解說如下**:

0x55555555的二進位制位01010101010101010101.......

n&0x55555555意思就是保留0,2,4,6,8.....等偶數字上的1,而(n>>1)&0x55555555是代表保留奇數字上的1,然後兩者相加,相加的意思是將相鄰的二進位制相加,又因為二進位制最大為1,1+1=10,用兩個位元組來儲存且不會溢位

0x33333333的二進位制為0011001100110011.........

與上意思相同,不過是以兩個位元組為單位,相鄰的兩個二進位制位相加(左兩個,有兩個)

正好對應(n>>2)

0x0f0f0f0f的二進位制為000011110000111100001111.......

總的來說:

1.用相鄰的1位相加

2.用相鄰的2位相加

3.用相鄰的4位相加

4.用相鄰的8位相加

5.用相鄰的16位相加

例項:用上圖二進位制來做1101 1001

第一步,相鄰的1位相加  (兩個bit儲存)

1+1=10   0+1=01  1+0=01  0+1=01

所以n=1001 0101

第二步,相鄰的2位相加   (四個bit儲存)

10+01=0011 01+01=0010

所以n=0011 0010

第三步,相鄰的4位相加    (八個bit儲存)

0011+0010=0000 0101     

由於樣例為1個位元組所以只有相鄰的4的位元組相加,當為int型時,則是相鄰的16個位元組相加

365 二進位制中有多少個1

原題 您在真實的面試中是否遇到過這個題?是 給定5 101 返回2 給定1023 1111111111 返回10 標籤 二進位制位元位操作 思路 直觀的方法是將二進位制數的每一位依次右移再 1,結果為真計數器就加1,最後返回計數器。ac class solution return result 挑戰...

求乙個數的二進位制中有多少個1

思路 首先,大部分人最先想到的解題方法是 獲得這個數的每個二進位制位上的數,然後判斷與1按位與 0 1 0,1 1 1 的結果是否等於1,若等於1,則說明這個二進位制位上的數是1,則計數加1,最後返回計數的結果。此外,還有另一種更簡單的解法 n n n 1 讓這個數n與n 1按位與再賦給n,它的意義...

Delphi 判斷乙個二進位制數中有多少個1

技術交流,dh講解 有個朋友發簡訊來求助,我想他是在筆試.哈哈.c 的,但是我們知道原理後,什麼都是一樣的.乙個數的二進位制形式是這樣的.10011001 那麼要判斷有多少個1的話,我們只要與 00000001與,然後迴圈右移與就可以了.比如第一次 10011001 and 00000001 1 說...