我想我可能会让这有点复杂。我们应该通过一个很长的时间,并返回数字的二进制表示中1的数目。对于负数,我们返回二的补码。我有积极的工作,但两个补充是有点关闭。任何提示做这项工作将不胜感激。用二进制补码查找二进制数,C
unsigned int binaryOnesCounter(long n) {
unsigned int oneCounter, negCounter;
int binaryStorage[63];
int index, negFlag;
oneCounter = negFlag = index = 0;
int i;
for (i = 0; i < 63; ++i)
{
binaryStorage[i] = 0;
}
if(n < 0) {
if (n == -1){
oneCounter = 63 + 1;
} else {
/* negate and add 1*/
negFlag = 1;
n = (n * -1) + 1;
}
}
while (n>=1) {
if (n%2 == 1) {
oneCounter++;
binaryStorage[index] = 1;
}
else if (n%2 == 0) {
binaryStorage[index] = 0;
}
n = n/2;
}
if (negFlag == 1 && n != 1) {
negCounter = 64;
oneCounter = negCounter - oneCounter;
}
return oneCounter;
}
问题是什么? –
传入64位整数并返回二进制表示中1的个数。二的补码为负数。 – Avallauch
您可以将数字转换为'uint64_t',然后使用bitshifts和bitmasks。 –