1. 程式人生 > >劍指offer 11 二進位制中1的個數

劍指offer 11 二進位制中1的個數

題目描述
輸入一個整數,輸出該數二進位制表示中1的個數。其中負數用補碼錶示。
本題思路:n = n&(n-1)
對於n-1的二進位制而言,其值為原來的n的二進位制的最後一個1變0,後面的0全部變為1。於是,n&(n-1)的結果是去掉了n的最後一個1。程式碼如下:

class Solution {
public:
     int  NumberOf1(int n) {
         int count=0;
        while(n)
        {
            count++;
            n = n&(n-1);
        }
         return
count; } };

順便複習一下左移右移的操作:
正數左右移,結果都是補零
負數左移,補零,右移,補1。