// 求二进制数中1的个数 public class Test_006 { public static void main(String[] args) { int number = 123; int total = 0;// 记录1的个数 System.out.println("数字为:" + number); System.out.println("数字二进制形式为:" + Integer.toBinaryString(number)); System.out.println("------------------"); // 解法一,每次与2求余,看是否为奇数,是的话就累计加一,最后这个结果就是二进制表示中1的个数。 while (number > 0) { if (number % 2 == 1) { total++; } number /= 2; } System.out.println("解法一数字中1的个数:" + total); System.out.println("------------------"); // 解法二,同样用到一个循环,只是里面的操作用位移操作简化了。 number = 123; total = 0; while (number > 0) { total += number & 1; number >>= 1; } System.out.println("解法二数字中1的个数:" + total); System.out.println("------------------"); // 解法三,用到一个巧妙的与操作,v & (v -1 )每次能消去二进制表示中最后一位1,利用这个技巧可以减少一定的循环次数。 number = 123; total = 0; while (number > 0) { number &= (number - 1); total++; } System.out.println("解法三数字中1的个数:" + total); System.out.println("------------------"); // 解法四,查表法,因为只有数据8bit,直接建一张表,包含各个数中1的个数,然后查表就行。复杂度O(1)。 // 直接把所有结果记录在一个数组中,然后根据需要查询即可、 } }