其他分享
首页 > 其他分享> > 剑指 Offer 15. 二进制中1的个数

剑指 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)就可以了

标签:tmp,cnt,15,Offer,二进制,可以,int,写成
来源: https://www.cnblogs.com/wsshub/p/14527314.html