안녕하세요. 언제나 휴일에 언휴예요.
이번 실습은 정수를 2진수로 출력하는 코드 작성입니다.
첫 번째 방식은 32개의 각 자리가 1인지 확인하는 방법입니다.
void PrintBinary(int num) { unsigned cnum = 1 << 31; int check = 0; while (cnum) { if (cnum & num) { printf("1"); check = 1; } else { if (check != 0) { printf("0"); } } cnum = cnum >> 1; } }
두 번째 방식은 일의 자리가 1인지 확인하고 2로 나눈 값으로 다시 재귀 함수를 호출하는 방식입니다.
역순으로 출력해야 하기 때문에 일의 자기가 1인지 확인한 값은 재귀 함수 호출 뒤에 출력합니다.
void PrintBinary2(int num) { if (num == 0) { return; } PrintBinary2(num / 2); printf("%d", num%2); }
다음은 테스트를 위한 main 함수를 포함한 코드입니다.
#include void PrintBinary(int num); void PrintBinary2(int num); int main() { PrintBinary(4); printf("\n"); PrintBinary(9); printf("\n"); PrintBinary(23); printf("\n"); PrintBinary2(4); printf("\n"); PrintBinary2(9); printf("\n"); PrintBinary2(23); printf("\n"); return 0; } void PrintBinary(int num) { unsigned cnum = 1 << 31; int check = 0; while (cnum) { if (cnum & num) { printf("1"); check = 1; } else { if (check != 0) { printf("0"); } } cnum = cnum >> 1; } } void PrintBinary2(int num) { if (num == 0) { return; } PrintBinary2(num / 2); printf("%d", num%2); }
실행 결과는 다음과 같습니다.
100 1001 10111 100 1001 10111