在PHP 編程中,處理二進制數據時,經常需要判斷某個二進制位是否為1。 PHP 提供了bindec()和decbin()這兩個非常實用的函數,分別用於二進制轉十進制和十進制轉二進制。本文將介紹如何結合這兩個函數,來判斷某一位二進制是否為1。
bindec(string $binary_string): int
將二進製字符串轉換為對應的十進制整數。
decbin(int $decimal): string
將十進制整數轉換為對應的二進製字符串。
例如:
echo bindec("101"); // 輸出 5
echo decbin(5); // 輸出 "101"
假設我們有一個十進制數字,我們想判斷它的二進製表示中的第$pos位(從右到左,從0開始計數)是否為1。實現思路如下:
將數字轉換為二進製字符串。
根據字符串長度計算目標位的索引。
檢查該位字符是否為'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。對於簡單學習和理解二進制位處理非常有幫助,但在實際項目中,推薦使用位運算提高性能和代碼可讀性。