剑指 Offer 15. 二进制中1的个数

这道题绝了,虽然是简单题,但是可以暴露不少问题。

// you need to treat n as an unsigned value
    public int hammingWeight(int n) {
        int cnt =0;
        int tmp;
        while(n!=0){//!!不可以写成n>0,因为可能给出最高位是1的负数,不知道系统是怎么输入二进制的
            tmp=n&1;
            if(tmp==1)//???写成if(n&1==1)居然不可以,c++甚至可以if(n&1)
               cnt++;
            n=n>>>1;//!!!java无符号右移是这个,牢记
        }
        return cnt;
    }
}

Q1:&,|符号表示什么意思。25&2的值是多少?
其实是将数字转化为二进制进行位运算,结果也是二进制的结果,转化为10进制展示
Q2:为什么if(n&1==1)不可以?
因为运算符优先级。if((n&1)==1)就可以了

posted @ 2021-03-13 02:14  wsshub  阅读(48)  评论(0)    收藏  举报