输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示。
思路:
负数部分 先取绝对值 然后减一 取余化为二进制 然后全部取反
#include<iostream>
using namespace std;
class Solution {
public:
int NumberOf1(int n) {
char B[32]={'0'};
int b=1,a,c=0;
if(n<0)
b=-1;
b>0?a=n:a=b*n-1;
for(int i=31;i>=0;i--){ //化为2进制
B[i]=a%2+'0';
if(B[i]=='1')
c++;
a=a/2;
}
if(b<0)
c=32-c; //取反
return c;
}
};
正常思路n&1 n<<左移就行了