剑指offer-位运算相关题目总结

题目描述

题目1.输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示

 思路分析: 

利用1(1的二进制位为0001)依次与该数对应二进制的每一位进行与运算,每次结果为1表示对应二进制的该位为1,结果为0表示对应二进制的该位为0;

那么如何使1与二进制的每位进行比较呢?答案是让1每次比较完后做左移运算,则其二进制的1每次都能左移一位而其其余位为0

 还是比较巧妙地!

代码如下:

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

猜你喜欢

转载自www.cnblogs.com/pathjh/p/12313282.html
今日推荐