输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示。
public class Solution { public int NumberOf1(int n) { int count = 0; int flag = 1; //在这个解法中,循环的次数等于整数二进制的位数,32位的整数即需要循环32次。 while(flag != 0){ if((n & flag) != 0) count++; flag = flag << 1; } return count; } }
改进解法,减少循环次数:
把一个整数减去1,再和原整数做与运算,会把该整数最右边的1变成0。那么一个整数的二进制表示中有多少个1,就可以进行多少次这样的操作。
public class Solution { public int NumberOf1(int n) { int count = 0; while(n != 0){ count++; n = (n-1) & n; } return count; } }
相关题目
1、用一条语句判断一个整数是不是2的整数次方。