191. Number of 1 Bits

仅供自己学习

 

思路:

直接判断每一个位有没有1,如果有1,计数一次即可。 因为二进制每个位的关系是2^N-1,所以我们用n & (1<<i)即可判断每个位是否为1,1<<i 是将1位移i位,即把第0位的1左移i位。

 

代码:

 1 class Solution {
 2 public:
 3     int hammingWeight(uint32_t n) {
 4         int res=0;
 5         for(int i=0;i<32;++i){
 6             if(n&(1<<i)) res++;
 7         }
 8         return res;
 9     }
10 };

 

还有一种方法是通过 n&(n-1)这个式子来判断是否存在位为1.如果6=110,5=101,4=100,6&5=4,相当于这个式子可以把最低为1的位变为0,就是说每次调用这个公式1就会少一个。那么只要判断n是不是大于0,大于0就执行一次公式并计数,如果小于等于0就返回技术结果即可

 

 1 class Solution {
 2 public:
 3     int hammingWeight(uint32_t n) {
 4         int res=0;
 5         while(n){
 6             n=n&(n-1);
 7             res++;
 8         }
 9         return res;
10     }
11 };

 

posted @ 2021-03-29 15:17  Mrsdwang  阅读(39)  评论(0编辑  收藏  举报