題目10 二進位制中的1的個數

2021-07-22 16:07:48 字數 1030 閱讀 4754

題目:請實現乙個函式,輸入乙個整數,輸出該書的二進位制表示中的1的個數。例如9表示成二進位制是1001,有2位

是1.因此如果輸入9,該函式輸出2.

解法1:

#includeusing namespace std;

int comulate(int number)

return count;

}

分析得,如果把乙個整數減去1,都是把最右邊的1變成0,如果它的右邊還有0的話,所有的0都變成1,而它的左邊所有位都保持不變。接下來把乙個整數和它減去1的結果做位運算,相當於把乙個整數和它減去1 的結果做位 與運算,相當於把它最右邊的1變成0.

改進解法:

int comulate(int n)

return count;

}

應用一:用一條語句判斷乙個數是不是2的整數次方。

思路:它的二進位制表示中有且只有一位是1 ,而其它都是0。根據前面分析,

把這個整數減去1之後再和它自己做與運算,這個整數中唯一的1 就會變成0.

bool comulate(int n)

if(count==1&&n==0)

return false;

}

應用二:輸入兩個整數m和n,計算需要改變m 得二進位制表示中的多少位才能得到n 。

思路:第一步求這兩個數的異或,第二步統計異或結果中1的位數。

int comulate(int m,int n)

return count;

}

總結:

把乙個整數減去1之後再和原來的整數做位與運算,得到的結果相當於是把整數的二進位制

表示中的最右邊乙個1 變成0 。

10 二進位制中1的個數

輸入乙個整數,輸出該數二進位制表示中1的個數。其中負數用補碼表示。方法一 把n和1做與運算,判斷n的最低位是不是1 接著把1左移一位得到2,再和n做運算,就能判斷n的次低位是不是1 每次都能判斷n的其中一位是不是1。這個解法的迴圈次數等於整數二進位制的位數。方法二 把乙個整數減去1,再和原整數做與運...

10 二進位制中1的個數

題目 輸入乙個整數,輸出該數二進位制表示中1的個數。其中負數用補碼表示 public int numberof1 int n if n 0 for int num list return res 演算法分析 求出數字的二進位制表示,然後分正負數來計算1的個數。public int numberof1...

10 二進位制中1的個數

輸入乙個整數,輸出該數二進位制表示中1的個數。其中負數用補碼表示。例如9的二進位制是1001,輸入9,輸出2 乙個數 1後,最右邊的1會變為0 比如1100 1後為1011 1100 1011 1000 擴充套件 1.判斷乙個整數是不是2的整數次方,2的整數次方的二進位制只有1個1,所以就是判斷二進...