二進制中1的個數

解法一:

class Solution {
public:
     int  NumberOf1(int n) {
         int i = 0;
         int sum = 0;
         
         while (i < 32)
         {
             if (n&(1 << i))
                 sum++;
             i++;
         }
         return sum;
         
     }
};

解法二:

class Solution {
public:
     int  NumberOf1(int n) {
         
         int flag = 1;
         int sum = 0;
         
         while (flag)
         {
             if (n & flag)
                 sum++;
             flag = flag << 1;
         }
         return sum;
     }
};

 

解法三:

1)把一個整數減去1之後再和原來的整數做位與運算,得到的結果相當於把整數的二進制表示中最右邊的1變成0.

2)0只有一個補碼0000 0000,如果是這樣,1000 0000就不會表示成-0的補碼

     補碼1000 0000唯一的表示-128

    在補碼中用(-128)代替了(-0),所以補碼的表示範圍爲: (-128~0~127)共256個.

class Solution {
public:
     int  NumberOf1(int n) {
         int sum = 0;
         
         while (n)
         {
             n = n & (n-1);
             sum++;
         }
         return sum;
     }
};
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章