public class test243{ //常规解法 public static int findOnesOfBinary1(int n){ int cnt = 0; int flag = 1; while(flag!=0){ if((n&flag)!=0){ cnt++; } flag=flag<<1;//此处不对n右移,而是对flag左移。因为n可能是负数,右移n要考虑符号问题。 } return cnt; } //惊喜解法 public static int findOnesOfBinary2(int n){ int cnt = 0; while(n!=0){ cnt++; n=n&(n-1);//这个操作每次将最右端的1变成0 } return cnt; } public static void main(String[] args){ System.out.println(findOnesOfBinary2(9)); } }