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

浙公网安备 33010602011771号