求出一个正整数转换成二进制后的数字“1”的个数。
例:数字23转为二进制为 10111,其中1的个数为4
int trueBitCount(int a ) {
// write code here
int count = 0;
if (a >= 0)
{
while (a)
{
if (a & 1) {//可以判断出当前a最后一位是1还是0
count++;
}
a = a >> 1;
}
}
else
{
//负数右移,我这个编译器是算术右移(大多数编译器都是算术右移)
//算术右移就是,最右边数丢弃,左边补符号位,因为是负数也就是补1
//这里如果还用while(a)就会一直死循环下去,因为左边会一直补1
//但我们是知道整形是32位存储在内存里面的,我们循环32次即可
for (int i = 0;i < 32;i++)
{
if (a & 1) {//可以判断出当前a最后一位是1还是0
count++;
}
a = a >> 1;
}
}
return count;
} c语言解法
import java.io.BufferedReader;
import java.io.InputStreamReader;
public class Main {
public static void main(String[] args) throws Exception {
BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
String str;
while ((str = bf.readLine()) != null) {
int temp = Integer.parseInt(str);
String s = Integer.toBinaryString(temp);
char[] chars = s.toCharArray();
int count = 0;
for (char aChar : chars) {
if (aChar == '1') {
count++;
}
}
System.out.println(count);
}
}
}