輸入乙個整數,輸出該數二進位制表示中1的個數。其中負數用補碼表示。
書上應該說了三種方法,第一種是將輸入的數字不停右移然後與1相與,但這樣會牽扯乙個問題,如果是負數,會比較麻煩,因為負數右移時要將最高位設定為1,這樣最終就會陷入死迴圈。為了避免這種情況,我們可以不變原來的資料,而是將1來移動,int是乙個32位的數,那麼我們就需要移動32次。還有一種做法是,這個數二進位制裡面有幾個1就只迴圈幾次的做法,將原來的數字減1再與原來的數字做與運算,會把這個數的最右邊的乙個1變為0。
//第二種
class solution {
public:
int numberof1(int n) {
int count=0;
for(int i=0;i<32;++i)
{int flag=n&(1《位運算相關。
劍指Offer 11 二進位制中1的個數
思路 如果乙個整數不為0,那麼這個整數至少有一位是1。如果我們把這個整數減1,那麼原來處在整數最右邊的1就會變為0,原來在1後面的所有的0都會變成1 如果最右邊的1後面還有0的話 其餘所有位將不會受到影響。舉個例子 乙個二進位制數1100,從右邊數起第三位是處於最右邊的乙個1。減去1後,第三位變成0...
劍指offer 11 二進位制中1的個數
輸入乙個整數,輸出該數二進位制表示中1的個數。其中負數用補碼表示。用1 1自身左移運算,其實後來就不是1了 和n的每位進行位與,來判斷1的個數 public class solution11 flag flag 1 return count public static void main strin...
《劍指Offer》11 二進位制中1的個數
題目 11.二進位制中1的個數 知識點 位運算 題目描述 輸入乙個整數,輸出該數二進位制表示中1的個數。其中負數用補碼表示。解題思路 解法一 這是我當時自己的思路,即通過除二取餘法來求輸入的十進位制數字的二進位制的每一位,再判斷其是否為一,當輸入數字為負數的時候,取其補碼 原數字取反加一 我使用的取...