안녕하세요. 언제나 휴일에 언휴예요.
이번 실습은 정수를 2진수로 출력하는 코드 작성입니다.
첫 번째 방식은 32개의 각 자리가 1인지 확인하는 방법입니다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
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인지 확인한 값은 재귀 함수 호출 뒤에 출력합니다.
1 2 3 4 5 6 7 8 9 |
void PrintBinary2(int num) { if (num == 0) { return; } PrintBinary2(num / 2); printf("%d", num%2); } |
다음은 테스트를 위한 main 함수를 포함한 코드입니다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 |
#include <stdio.h> 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); } |
실행 결과는 다음과 같습니다.
1 2 3 4 5 6 |
100 1001 10111 100 1001 10111 |