이진수를 십진수로 변환한다는 것은, 0과 1만으로 구성된 2진법 숫자를 우리가 일상적으로 사용하는 10진법 형태의 숫자로 바꾸는 과정을 의미합니다.
이 글에서는 PHP에서 다양한 방법으로 이진수를 십진수로 변환하는 방법을 알아보겠습니다.
이진수 → 십진수 변환의 원리
이진수를 십진수로 변환하려면 각 자리의 이진 숫자에 2의 거듭제곱(가장 오른쪽 자리부터 0제곱 시작)을 곱한 뒤, 모든 결과를 더하면 됩니다.
예시: 이진수 1011 변환하기
| 자릿값(위치) | 3 | 2 | 1 | 0 |
|---|---|---|---|---|
| 이진 숫자 | 1 | 0 | 1 | 1 |
| 계산 | 1×2³ | 0×2² | 1×2¹ | 1×2⁰ |
| 결과 | 8 | 0 | 2 | 1 |
최종 결과: 8 + 0 + 2 + 1 = 11
방법 1: 내장 함수 bindec() 사용하기
PHP는 이진수를 십진수로 바로 변환해 주는 bindec() 함수를 기본 제공합니다. 가장 간단하고 권장되는 방법입니다.
<?php $binary = "101"; // bindec() 함수로 이진수를 십진수로 변환 $decimal = bindec($binary); echo "Binary $binary = Decimal $decimal"; ?>
출력 결과:
Binary 101 = Decimal 5
방법 2: 반복문을 활용한 수동 변환
내장 함수 없이 직접 계산 로직을 구현하고 싶다면, 반복문을 통해 각 이진 숫자를 하나씩 처리하는 방식을 사용할 수 있습니다.
<?php
$binary = "1011";
$decimal = 0;
$length = strlen($binary);
// 오른쪽에서 왼쪽으로 각 자리 숫자를 순회
for ($i = 0; $i < $length; $i++) {
$digit = $binary[$length - $i - 1];
$decimal += $digit * pow(2, $i);
}
echo "Binary $binary = Decimal $decimal";
?>출력 결과:
Binary 1011 = Decimal 11
방법 3: 비트 시프트 연산 활용하기
비트 단위 연산(bitwise operation)을 활용하면 더욱 효율적으로 변환할 수 있습니다. 왼쪽 시프트(<<)는 곱하기 2와 같은 효과를 냅니다.
<?php
function binaryToDecimalBitwise($binary) {
$decimal = 0;
for ($i = 0; $i < strlen($binary); $i++) {
$decimal = ($decimal << 1) + $binary[$i];
}
return $decimal;
}
$binary = "1111";
$decimal = binaryToDecimalBitwise($binary);
echo "Binary $binary = Decimal $decimal";
?>출력 결과:
Binary 1111 = Decimal 15
세 가지 방법 비교
| 방법 | 시간 복잡도 | 공간 복잡도 | 적합한 용도 |
|---|---|---|---|
| bindec() | O(1) | O(1) | 간단한 변환 작업 |
| 반복문 수동 변환 | O(n) | O(1) | 알고리즘 학습 |
| 비트 시프트 | O(n) | O(1) | 성능이 중요한 경우 |
마무리
PHP에서 이진수를 십진수로 변환할 때는 bindec() 함수를 사용하는 것이 가장 간편합니다. 다만 학습 목적이나 커스텀 로직이 필요한 경우에는 반복문 또는 비트 시프트 연산을 활용한 수동 변환 방식을 직접 구현해 보는 것도 좋습니다.