- 题目描述
输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示。
- 思路1
原始数据-1,再与原始数据做&操作。
- 代码1
public class Solution {
public int NumberOf1(int n) {
int ans=0;
//当n=0时,循环停止
while(n!=0){
ans++;
/*以1100为例:
1100-1=1011,1100中最右边的1变为了0,后面所有0都变为1
1100&1011=1000,相当于将原来最右边的那个1变为了0
*/
n=n&(n-1);
}
return ans;
}
}
- 思路2(不如思路1)
原始数据每次进行无符号右移(>>>=)一位,与1做&操作来判断原始数据是否有1
- 代码2
public class Solution {
public int NumberOf1(int n) {
int ans=0;
//当n=0时,循环停止
while(n!=0){
/*以1100为例:
1100&1=1100&0