우측 쉬프트 연산을 한 번 하면 나누기 2와 같은 결과가 나옵니다.
짝수는 우측 쉬프트 연산을 두 번 한 값을 더하였을 때 원래 수입니다.
홀수는 우측 쉬프트 연산을 두 번 한 값을 더하였을 때 (원래 수-1)입니다.
반복문은 재귀함수로 대체할 수 있습니다.
이를 토대로 구현하면 다음처럼 구현할 수 있습니다.
#include <stdio.h>
int BinaryCounter(int num,int count)
{
int half_num = num >> 1;
int isone = 0;
if (num == 0)
{
return count;
}
isone = (num != (half_num + half_num));
if (isone)
{
count++;
}
count = BinaryCounter(half_num,count);
printf("%d", isone);
return count;
}
void TestBinaryCounter(int num)
{
int count = 0;
printf("=== Test number: %d \n", num);
count = BinaryCounter(num, 0);
printf("\n이진수에서 1의 개수:%d\n", count);
printf("-----------------------\n");
}
int main()
{
TestBinaryCounter(6);
TestBinaryCounter(24);
TestBinaryCounter(17);
TestBinaryCounter(31);
system("pause");
return 0;
}