输入一个整数 n ,输出该数32位二进制表示中1的个数。其中负数用补码表示。
方法1:
方法1: 将32位每一位都与1相与。统计1的个数。
public int NumberOf1(int n) {
int cnt = 0;
//方法1: 将32位每一位都与1相与。统计1的个数。
// 1的32进制: 0000...1 1<<i:通过逐渐左移,使得1能够与n的每一位相与
for(int i=0;i<32;i++){
if((n & (1<<i)) != 0){
cnt++;
}
}
return cnt;
}
方法2:
方法2: 逐渐将n右侧的1变为0.
public int twoNumberOf1(int n) {
int cnt = 0;
// 方法2: 逐渐将n右侧的1变为0.
// n = n & (n-1); 将n最右侧的1变为0
while (n != 0){
cnt ++;
n = n & (n-1);
}
return cnt;
}
方法3:
方法3:将数字n转化为32位字符串的形式。
public int threeNumberOf1(int n) {
int cnt = 0;
// 方法3:将数字n转化为32位字符串的形式。
String numStr = Integer.toBinaryString(n);
for(int i=0;i<numStr.length();i++){
if(numStr.charAt(i)=='1'){
cnt++;
}
}
return cnt;
}