题目描述
输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示。
代码
#include <iostream>
#include <vector>
#include <cstdlib>
#include <stack>
#include <cmath>
using namespace std;
/*
输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示。
*/
int NumberOf1(int n) {
int i=0;
if(n>0) {
while(n>0) {
i+=n%2;
n = n/2;
};
return i;
} else if(n<0) {
n = (-n)-1;
while(n>0) {
i+=n%2;
n = n/2;
};
return 32- i;
}
return 0;
};
int main() {
cout<<NumberOf1(-2147483648);
};
总结
补码的性质,负数的补码等于负数的正数-1 的 源码取反, 我使用i来统计1的个数,如果为负数就用32 减去,如果为正数就为i 的个数