位移与“与运算”
正数的补码是自身,负数的补码是原码的高位不变,数值位取反加1(符号位不参与取反)
那么-7是负数,原码:1000 0111,反码:1111 1000,补码:1111 1001
#include <iostream>
#include <vector>
using namespace std;
class Solution
{
public:
/*二进制中1的个数*/
int NumberOf1(int n) {
int count = 0;
unsigned int flag = 1;
while (flag)
{
if (n&flag)
{
count++;
}
flag = flag << 1;
}
return count;
}
};
int main()
{
Solution solu;
int result=solu.NumberOf1(-7);
cout << result << endl;
system("pause");
return 0;
}