10진수와 2진수 변환 원리
10진수 정수를 2진수로 변환할 때는 '2로 나누어 나머지를 기록하고 역순으로 배열'하는 방법을 사용합니다. 변환 과정은 다음과 같습니다:
- 10진수를 2로 나누어 몫과 나머지를 구합니다
- 몫이 0이 될 때까지 계속 2로 나눕니다
- 구해진 나머지들을 역순으로 결합합니다
예를 들어, 10진수 17을 2진수로 변환하는 과정:
17 ÷ 2 = 8 ... 1 8 ÷ 2 = 4 ... 0 4 ÷ 2 = 2 ... 0 2 ÷ 2 = 1 ... 0 1 ÷ 2 = 0 ... 1
나머지를 역순으로 읽으면: 10001 (2진수)
C 언어 구현 예제
방법 1: 배열을 이용한 변환
#include <stdio.h>
void convertToBinaryArray(int num) {
int bits[32];
int index = 0;
if(num == 0) {
printf("2진수: 0\n");
return;
}
while(num > 0) {
bits[index++] = num % 2;
num /= 2;
}
printf("2진수: ");
for(int i = index - 1; i >= 0; i--) {
printf("%d", bits[i]);
}
printf("\n");
}
방법 2: 비트 연산을 이용한 변환
void convertToBinaryBitwise(int num) {
unsigned int mask = 1u << 31;
int started = 0;
printf("2진수: ");
if(num == 0) {
printf("0\n");
return;
}
while(mask > 0) {
if(num & mask) {
printf("1");
started = 1;
} else if(started) {
printf("0");
}
mask >>= 1;
}
printf("\n");
}
방법 3: 재귀 함수를 이용한 변환
void convertToBinaryRecursive(int num) {
if(num > 1) {
convertToBinaryRecursive(num / 2);
}
printf("%d", num % 2);
}
메인 함수
int main() {
int input;
printf("10진수 정수를 입력하세요: ");
scanf("%d", &input);
printf("\n변환 결과:\n");
printf("배열 방식: ");
convertToBinaryArray(input);
printf("비트 연산: ");
convertToBinaryBitwise(input);
printf("재귀 방식: ");
if(input == 0) {
printf("0");
} else {
convertToBinaryRecursive(input);
}
printf("\n");
return 0;
}
실행 예시
10진수 정수를 입력하세요: 25 변환 결과: 배열 방식: 2진수: 11001 비트 연산: 2진수: 11001 재귀 방식: 11001
주의사항
- 음수는 2의 보수 표현으로 변환해야 합니다
- 변환 가능한 최대값은 사용하는 데이터 타입에 따라 다릅니다
- 비트 연산 방식은 32비트 정수를 기준으로 합니다