2진수(binary number)가 입력으로 주어졌을 때, 이를 10진수(decimal number)로 변환하는 것이 이 글의 목표입니다.
2진수와 10진수의 개념
컴퓨터에서 10진수는 밑(base)이 10인 숫자 체계로, 0부터 9까지의 숫자로 표현됩니다. 반면 2진수는 밑이 2인 숫자 체계로, 0과 1이라는 두 개의 비트만 사용하여 수를 나타냅니다.
2진수를 10진수로 변환하는 원리
2진수를 10진수로 변환하려면 다음과 같은 절차를 따릅니다. 먼저 가장 오른쪽 자릿수부터 왼쪽 방향으로 각 자릿수를 하나씩 추출합니다. 그런 다음 각 자릿수에 2의 거듭제곱(0승부터 시작하여 1씩 증가)을 곱하고, 마지막 자릿수는 (자릿수 개수 − 1)승이 됩니다. 이렇게 곱한 값들을 모두 더하면 최종적인 10진수 값을 얻을 수 있습니다.
예시
입력값이 1010일 때의 변환 과정은 다음과 같습니다.
입력: 1010
0 X 2^0 = 0
1 X 2^1 = 2
0 X 2^2 = 0
1 X 2^3 = 8
출력: 총합 = 0 + 2 + 0 + 8 = 10알고리즘
Start
Step1-> 2진수를 10진수로 변환하는 함수 선언
int convert(string str)
string n = str 설정
int val = 0 설정
int temp = 1 설정
int len = n.length() 설정
Loop For int i = len - 1; i >= 0; i--
IF n[i] == '1'
val += temp
End
temp = temp * 2
End
return val
Step 2-> main() 함수에서
string val = "11101" 설정
convert(val) 호출
StopC++ 코드 구현
#include <iostream>
#include <string>
using namespace std;
// 2진수를 10진수로 변환하는 함수
int convert(string str) {
string n = str;
int val = 0;
int temp = 1;
int len = n.length();
for (int i = len - 1; i >= 0; i--) {
if (n[i] == '1')
val += temp;
temp = temp * 2;
}
return val;
}
int main() {
string val = "11101";
cout<<val<<" 을(를) 10진수로 변환한 결과 : "<<convert(val);
}실행 결과
위 코드를 실행하면 다음과 같은 출력이 생성됩니다.
11101 을(를) 10진수로 변환한 결과 : 29
이처럼 문자열 형태의 2진수를 오른쪽 끝자리부터 순회하면서 해당 자릿수가 '1'일 때만 현재의 2의 거듭제곱 값을 누적하고, 매 반복마다 거듭제곱 값을 2배씩 늘려가는 방식으로 손쉽게 10진수 변환을 구현할 수 있습니다.