public static int getOneCount(int num) { /** * 思路为:每次向右移动一位,而后与1相与, * */ int oneCount = 0; do { if((num & 1) != 0){ ++oneCount; } } while ((num >>>= 1) != 0); /**必须用num>>>=1(无符号右移),而不能用num>>=1(有符号右移), * 由于当参数为负数时,有符号右移老是在高位插入1,致使死循环 **/ return oneCount; }