剑指 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