题目描述
输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示。
思路
- 可以使用位运算来处理。
- n & (n-1) 结果中1的个数比n少一个。
- 在位运算时,负数就是用补码运算的,所以不需要特殊处理。
ps:补码为原码各个位置取反,最后在末位加1。
例如:4 & 3 = 0 (1个1 变成了 0个1)、5 & 4 = 4 (2个1 变成了 1个1)
Java代码实现
public int NumberOf1(int n) { int res = 0; while( n != 0){ res++; n = n & (n-1); } return res; }