题目描述
输入一个整数,输出该数32位二进制表示中1的个数。其中负数用补码表示。
思路:
考察位运算,最优做法:把一个整数减去1再与原来的整数做位与运算,得到的结果相当于把整数的二进制表示中最右边的1变成0.
这样有多少个1就循环多少次
C++
class Solution {
public:int NumberOf1(int n) {int cnt = 0;while(n){n = (n - 1) & n;//移走最右边的1++cnt;}return cnt;}
};
输入一个整数,输出该数32位二进制表示中1的个数。其中负数用补码表示。
思路:
考察位运算,最优做法:把一个整数减去1再与原来的整数做位与运算,得到的结果相当于把整数的二进制表示中最右边的1变成0.
这样有多少个1就循环多少次
C++
class Solution {
public:int NumberOf1(int n) {int cnt = 0;while(n){n = (n - 1) & n;//移走最右边的1++cnt;}return cnt;}
};