/** * 面试题15:二进制中1的个数 * 请实现一个函数,输入一个整数,输出该数二进制表示中1的个数 * 例如,把9表示成二进制是1001,有2位是1.因此,如果输入9,则该函数输出2 */public class No15 { public static void main(String[] args) { //构建测试用例 //功能测试:正常输入-->9 //边界值测试:0等 //特殊值测试: -5 System.out.println(NumberOf1(6)); System.out.println(NumberOf1Normal(6)); System.out.println(NumberOf1(1)); System.out.println(NumberOf1Normal(1)); } /** * 剑指offer技巧:把一个整数减去1之后再和原来的整数做位与运算, * 得到的结果相当于把整数的二进制表示中最右边的1变成0 * @param n 输入的数字 * @return 该数字的二进制表示中1的个数 */ public static int NumberOf1(int n){ int count = 0; while(n!=0){ count++; n = n&(n-1); } return count; } /** * 正常按位测试做法 */ public static int NumberOf1Normal(int n){ int count = 0; int flag = 1; while(flag!=0){ if((n&flag)!=0){ count++; } flag<<=1; } return count; }}