나는 이것이 약간 복잡 할 수도 있다고 생각한다. 우리는 long을 전달하고 숫자의 2 진 표현에 1의 수를 반환해야합니다. 네거티브의 경우 2의 보수를 반환합니다. 나는 긍정적 인 반응을 보였지만, 2의 보수는 약간 벗어났다. 이 작품을 만들기위한 조언을 주시면 감사하겠습니다.2의 보수가있는 숫자에서 이진수를 찾는 것, 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의 수를 2 진 표현으로 리턴하십시오. 네거티브를위한 2의 보수. – Avallauch
숫자를'uint64_t'로 변환 한 다음 bitshifts와 bitmasks를 대신 사용할 수 있습니다. –