一、题目描述
输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示。
二、直接上代码分析
public class Solution {
public int NumberOf1(int n) {
int count = 0;
int k = 0x01;
if( n == 0 ) count = 0;
//先不管符号位,直接31次判断。
for( int i = 0;i < 31;i++ ){
if( (n & k) > 0 ){
count++;
}
k = k << 1;
}
//如果是符号的话,还有加上符号位
if( n < 0 )count++;
return count;
}
}
运行结果: