[C언어 소스] 이진수 출력 및 1의 개수 구하기 – 반복문, 나누기, 나머지 연산 사용 불가

우측 쉬프트 연산을 한 번 하면 나누기 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;
}
이진수 1의 개수 구하기 실행 화면
이진수 1의 개수 구하기 실행 화면