當前位置: 首頁> 最新文章列表> 如何用PHP 的bindec() 函數結合decbin() 來判斷某一位二進制是否為1?

如何用PHP 的bindec() 函數結合decbin() 來判斷某一位二進制是否為1?

M66 2025-06-23

在PHP 編程中,處理二進制數據時,經常需要判斷某個二進制位是否為1。 PHP 提供了bindec()decbin()這兩個非常實用的函數,分別用於二進制轉十進制和十進制轉二進制。本文將介紹如何結合這兩個函數,來判斷某一位二進制是否為1。

bindec() 和decbin() 簡介

  • bindec(string $binary_string): int
    將二進製字符串轉換為對應的十進制整數。

  • decbin(int $decimal): string
    將十進制整數轉換為對應的二進製字符串。

例如:

 echo bindec("101");  // 輸出 5
echo decbin(5);      // 輸出 "101"

判斷某一位二進制是否為1的思路

假設我們有一個十進制數字,我們想判斷它的二進製表示中的第$pos位(從右到左,從0開始計數)是否為1。實現思路如下:

  1. 將數字轉換為二進製字符串。

  2. 根據字符串長度計算目標位的索引。

  3. 檢查該位字符是否為'1'

示例代碼

<?php
function isBitSet($decimalNumber, $pos) {
    // 將十進制轉為二進製字符串
    $binaryString = decbin($decimalNumber);

    // 計算該位元在字符串中的索引,二進製字符串是從左到右的高位元到低位元
    $index = strlen($binaryString) - 1 - $pos;

    // 如果索引小於0,說明該位元超出範圍,默認返回false
    if ($index < 0) {
        return false;
    }

    // 判斷對應位元是否為 '1'
    return $binaryString[$index] === '1';
}

// 測試
$number = 13; // 二進制為1101
$position = 2; // 從右邊數1。2位元,0基索引,二進制中是1
if (isBitSet($number, $position)) {
    echo "1。 {$position} 位元是1";
} else {
    echo "1。 {$position} 位元不是1";
}
?>

輸出:

 1。 2 位元是1

補充說明

  • 位數從右往左數,最低位為0。

  • 使用decbin()轉換十進制數為二進製字符串時,字符串長度可能小於預期的位數,超過長度的位默認認為是0。

  • 如果想判斷多位,可以結合循環或位運算。

使用位運算替代字符串操作(推薦)

雖然使用decbin()和字符串索引能實現功能,但位運算效率更高,寫法更簡潔:

 function isBitSetBitwise($number, $pos) {
    return (($number >> $pos) & 1) === 1;
}

同樣可以用上述函數判斷某一位是否為1。

結語

本文介紹瞭如何用PHP 的bindec()decbin()函數結合起來判斷某一位二進制是否為1。對於簡單學習和理解二進制位處理非常有幫助,但在實際項目中,推薦使用位運算提高性能和代碼可讀性。