面试题十五:二进制中1的个数

 

方法一:位运算 整数与1做&运算,整数右移循环。但是遇到负数会出现死循环;
方法二:位运算 整数与1做&运算,1左移循环;

    int f1(int n){
    
          int count=0;
          int t=1;
            while(t!=0){
                  if(t&n==1)
                    count++;
                t<<=1;
            }
            return count;
        
    }

  

方法三:减一法 将整数减去1后,在二进制中从右到左第一个1变0,左边不变,右边变1,结果再和原先整数于起来,循环;

 int f2(int n){
                int count=0;
                while(n!=0){
                    count++;
                    n&=(n-1);                 
                }  
            }

 

posted @ 2020-03-29 14:32  浪波激泥  阅读(218)  评论(0编辑  收藏  举报