이번 글에서는 문자열 형태로 입력받은 이진수(binary number)를 10진수(base 10) 값으로 변환하여 반환하는 JavaScript 함수를 작성해 보겠습니다.
구현 방법은 생각보다 간단합니다. for 반복문을 사용해 문자열을 한 글자씩 순회하면서, 지금까지 계산한 값을 2배로 곱한 뒤 현재 비트의 값을 더해 주면 됩니다. 이는 왼쪽에서 오른쪽으로 자릿수를 이동하며 값을 누적하는 방식과 동일합니다.
예제 코드
const binaryToDecimal = binaryStr => {
let num = 0;
for(let i = 0; i < binaryStr.length; i++){
num *= 2;
num += Number(binaryStr[i]);
};
return num;
};
console.log(binaryToDecimal('1101'));
console.log(binaryToDecimal('1101000'));
console.log(binaryToDecimal('10101'));실행 결과
콘솔에 출력되는 결과는 다음과 같습니다.
13 104 21
동작 원리
예를 들어 '1101'의 경우 동작 과정을 살펴보면 다음과 같습니다.
- 첫 번째 비트 '1': num = 0 × 2 + 1 = 1
- 두 번째 비트 '1': num = 1 × 2 + 1 = 3
- 세 번째 비트 '0': num = 3 × 2 + 0 = 6
- 네 번째 비트 '1': num = 6 × 2 + 1 = 13
이처럼 각 단계에서 기존 값을 2배로 늘리고 새로운 비트를 더하는 방식으로, 최종적으로 이진수 '1101'에 해당하는 10진수 13이 계산됩니다. 참고로 내장 메서드인 parseInt('1101', 2)를 사용하면 같은 결과를 더 간단하게 얻을 수 있지만, 위 방식은 변환 원리를 직접 구현한다는 점에서 학습 목적에 유용합니다.