365 二進位制中有多少個1

2022-05-12 01:58:11 字數 824 閱讀 2007

原題**:

您在真實的面試中是否遇到過這個題?  是

給定5(101),返回2

給定1023(1111111111),返回10

標籤

二進位制位元位操作

思路:直觀的方法是將二進位制數的每一位依次右移再&1,結果為真計數器就加1,最後返回計數器。

ac**:

class

solution

}return

result;

}};

挑戰:o(m)時間複雜度 。

如果n的二進位制表示中有k個1,那麼這個方法只需要迴圈k次即可。其原理是不斷清除n的二進位制表示中最右邊的1,同時累加計數器,直至n為0。

為什麼n &= (n – 1)能清除最右邊的1呢?

因為從二進位制的角度講,n相當於在n - 1的最低位加上1。舉個例子,8(1000)= 7(0111)+ 1(0001),所以8 & 7 = (1000)&(0111)= 0(0000),清除了8最右邊的1(其實就是最高位的1,因為8的二進位制中只有乙個1)。

再比如7(0111)= 6(0110)+ 1(0001),所以7 & 6 = (0111)&(0110)= 6(0110),清除了7的二進位制表示中最右邊的1(也就是最低位的1) 。

**:**:

int countones(int

num)

return

result;

}

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

演算法函式 1 int bit count one unsigned intn 2 下面我們來詳細解說如下 0x55555555的二進位制位01010101010101010101.n 0x55555555意思就是保留0,2,4,6,8.等偶數字上的1,而 n 1 0x55555555是代表保留奇數...

整數的二進位制表達中有多少個1

給定乙個32位的整數n,可為0,可為正,也可為負,返回該整數二進位制表達中1的個數。最簡單的做法就是求出乙個整數如何得到它的二進位制數。以整數5為例。用5除以2,取餘的結果為1時代表二進位制表達中含有乙個1,此時的被除數變為5 2。迴圈直到被除數為0,迴圈結束。注意 負數的二進位制表示的首位為1.在...

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

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