【解题报告】lintcode365求二进制中有多少个1
题意
求一个32位整数的二进制中有多少个1解法
位运算,每次减一然后按位与,由于借位原理,当数字变为0的时候,就没有1了 例子: 5(101) 第一轮 5 - 1 = 4(100) 5 & 4 = 4(100) 第二轮 4 - 1 = 3(011) 4 & 3 = 0(000) 此时n = 0,停止,进行了2轮,所以有两个1代码
public class Solution { /** * @param num: an integer * @return: an integer, the number of ones in num */ public int countOnes(int n) { // write your code her int count = 0; while(n!= 0){ count++; n = n & (n - 1); } return count; } };