C#으로 2진수를 10진수로 변환하기
2진수(binary)는 0과 1만으로 수를 표현하는 체계로, 프로그래밍에서 자주 마주치는 개념입니다. 이 글에서는 별도의 내장 함수 없이 C#의 반복문과 기본 산술 연산만으로 2진수를 10진수(decimal)로 변환하는 방법을 단계별로 살펴보겠습니다.
핵심 원리는 간단합니다. 2진수의 각 자릿수를 오른쪽부터 하나씩 추출하고, 그 자릿수에 해당하는 2의 거듭제곱(1, 2, 4, 8...)을 곱한 뒤 모두 더하면 됩니다.
1단계: 2진수 값 설정
먼저 변환할 2진수 값을 int 변수에 저장합니다. 여기서는 2진수 101을 사용합니다.
int num = 101;
2단계: 원본 값 보관
반복문 안에서 num 값은 계속 변경되므로, 최종 출력을 위해 원본 값을 새 변수에 미리 할당해 둡니다.
binVal = num;
3단계: 반복문으로 자릿수 변환
num이 0보다 큰 동안 아래 로직을 반복 실행하며 자릿수와 밑수(base value)를 처리합니다.
while (num > 0) {
rem = num % 10;
decVal = decVal + rem * baseVal;
num = num / 10;
baseVal = baseVal * 2;
}
각 코드 줄이 수행하는 역할은 다음과 같습니다.
- rem = num % 10; — 10으로 나눈 나머지를 구해 가장 오른쪽 자릿수(0 또는 1)를 추출합니다.
- decVal = decVal + rem * baseVal; — 추출한 자릿수에 현재 밑수(2의 거듭제곱)를 곱해 결과에 누적합니다.
- num = num / 10; — 이미 처리한 자릿수를 제거하기 위해 정수 나눗셈을 수행합니다.
- baseVal = baseVal * 2; — 다음 자릿수를 위해 밑수를 2배씩 증가시킵니다.
전체 예제 코드
위 과정을 모두 합친 완성된 C# 코드는 다음과 같습니다.
using System;
using System.Collections.Generic;
using System.Text;
namespace Demo {
class MyApplication {
static void Main(string[] args) {
int num, binVal, decVal = 0, baseVal = 1, rem;
num = 101;
binVal = num;
while (num > 0) {
rem = num % 10;
decVal = decVal + rem * baseVal;
num = num / 10;
baseVal = baseVal * 2;
}
Console.Write("Binary Number: " + binVal);
Console.Write("\nDecimal: " + decVal);
Console.ReadLine();
}
}
}
실행 결과
Binary Number: 101 Decimal: 5
2진수 101은 (1 × 4) + (0 × 2) + (1 × 1) = 5이므로, 프로그램이 정확히 10진수 5로 변환한 것을 확인할 수 있습니다. 이처럼 나머지 연산과 정수 나눗셈만으로도 진법 변환 로직을 손쉽게 구현할 수 있습니다.