去除掉二进制最右边的一个1. n&(n-1)
/** * 输入一个整数,输出该数32位二进制表示中1的个数。其中负数用补码表示。 * @param n 整数 * @return 1的个数 */ public int NumberOf1(int n) { int res=0; while(n!=0){ res++; n&=(n-1); } return res; }
n&(n-1)
/** * 输入一个整数,输出该数32位二进制表示中1的个数。其中负数用补码表示。 * @param n 整数 * @return 1的个数 */ public int NumberOf1(int n) { int res=0; while(n!=0){ res++; n&=(n-1); } return res; }