C#에서 이진수(binary)를 십진수(decimal)로 변환하는 것은 자릿값의 개념만 이해하면 비교적 간단하게 구현할 수 있습니다. 이 글에서는 while 루프를 활용해 입력된 이진수의 나머지(remainder)를 구하고, 각 자릿수에 해당하는 밑(base) 값을 곱한 뒤 누적하여 십진수를 계산하는 방법을 소개합니다.
변환 원리
이진수를 십진수로 바꾸는 핵심 아이디어는 다음과 같습니다.
1. while 루프를 돌면서 이진수의 마지막 자릿수(나머지)를 구합니다.
2. 구한 나머지에 현재 밑 값(1, 2, 4, 8...)을 곱합니다.
3. 결과를 십진수 변수에 더해 누적합니다.
4. 숫자를 10으로 나눠 다음 자릿수로 이동하고, 밑 값은 2배씩 증가시킵니다.
이 과정을 코드로 표현하면 다음과 같습니다.
while (val > 0) {
remainder = val % 10;
myDecimal = myDecimal + remainder * baseVal;
val = val / 10;
baseVal = baseVal * 2;
}전체 예제 코드
아래는 위 로직을 포함한 C# 전체 소스 코드입니다. 이진수 1010을 입력값으로 사용해 십진수로 변환합니다.
using System;
using System.Collections.Generic;
using System.Text;
namespace Demo {
class toBinary {
static void Main(string[] args) {
int val = 1010, myBinary, remainder;
int myDecimal = 0, baseVal = 1;
myBinary = val;
while (val > 0) {
remainder = val % 10;
myDecimal = myDecimal + remainder * baseVal;
val = val / 10;
baseVal = baseVal * 2;
}
Console.Write("Binary Number : " + myBinary);
Console.Write("\nConverted to Decimal: " + myDecimal);
Console.ReadLine();
}
}
}실행 결과
위 프로그램을 실행하면 다음과 같은 출력을 확인할 수 있습니다.
Binary Number : 1010 Converted to Decimal: 10
코드 설명
이진수 1010은 각 자릿수가 오른쪽부터 1, 2, 4, 8의 가중치를 가집니다. 따라서 계산 과정은 다음과 같습니다.
- 첫 번째 반복: 나머지 0 × 1 = 0
- 두 번째 반복: 나머지 1 × 2 = 2
- 세 번째 반복: 나머지 0 × 4 = 0
- 네 번째 반복: 나머지 1 × 8 = 8
모든 값을 더하면 0 + 2 + 0 + 8 = 10이 되어, 이진수 1010이 십진수 10으로 정확히 변환됩니다.