二進位轉十進位是將二進位數字(基數 2,僅用 0 和 1)轉換為等價十進位數字(基數 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:使用位元左移運算
此方法使用位元運算高效轉換
<?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()。教學目的或自訂邏輯時,用迴圈或位元運算實作手動轉換。
