求出一个正整数转换成二进制后的数字“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); } } }