二進位制表示中 1 的個數

2021-09-24 13:24:57 字數 666 閱讀 1612

輸入乙個整數,輸出該數二進位制表示中1的個數。其中負數用補碼表示。

需要注意的是:

右移運算子是將乙個二進位制數按指定移動的位數向右移動。

移動過程中,正數最高位補0,負數最高位補1,無符號數最高位補0。

因此:右移整數,遇到負數的測試序列會導致陷入死迴圈:

if ((n & 1) == 1) 

n = n >> 1;

考慮左移 1,按位與測試序列,直至 1 從右端移出

while (flag != 0) 

flag = flag << 1;

}

一種巧妙的解法,考慮 乙個整數的二進位制表示 減一 的操作,

乙個二進位制數1100,減去1後,得到1011,

減1的結果相當於把從最右邊的乙個1開始的所有位都取反。這時候再把原來的整數和減去1之後的結果做與運算,從原來整數最右邊乙個1那一位開始所有位都會變成0。如1100&1011=1000.

因此,把乙個整數減去1,再和原整數做與運算,會把該整數最右邊乙個1變成0., 0仍保持0,那麼乙個整數的二進位制有多少個1,就可以進行多少次減 1 的操作

public int numberof1(int n)

return count;

}

二進位制表示中1的個數

28.整數的二進位制表示中1的個數 運算 題目 輸入乙個整數,求該整數的二進位制表達中有多少個1。例如輸入10,由於其二進位制表示為1010,有兩個1,因此輸出2。分析 這是一道很基本的考查位運算的面試題。包括微軟在內的很多公司都曾採用過這道題。如果位數只有八位,使用查表法時間複雜度只有o 1 co...

二進位制表示中1的個數

輸入乙個整數,輸出該數二進位制表示中1的個數。其中負數用補碼表示。1 int cnt 0 2 int cnt 0 3 while a 分析一下 這段小小的 很是巧妙。如果乙個整數不為0,那麼這個整數至少有一位是1。如果我們把這個整數減1,那麼原來處在整數最右邊的1就會變為0,原來在1後面的所有的0都...

整數二進位制表示中1的個數

出自 題目 輸入乙個整數,求該整數的二進位制表達中有多少個1。例如輸入10,由於其二進位制表示為1010,有兩個1,因此輸出2。分析 這是一道很基本的考查位運算的面試題。包括微軟在內的很多公司都曾採用過這道題。乙個很基本的想法是,我們先判斷整數的最右邊一位是不是1。接著把整數右移一位,原來處於右邊第...