PHPプログラミングでは、バイナリデータを処理する場合、バイナリビットが1であるかどうかを判断する必要があることがよくあります。PHPは、それぞれ2つの非常に実用的な機能を提供します。この記事では、これら2つの関数を組み合わせて、特定のバイナリが1であるかどうかを判断する方法を紹介します。
bindec(string $ binary_string):int
バイナリ文字列を対応する小数整数に変換します。
Decbin(int $ decimal):文字列
小数整数を対応するバイナリ文字列に変換します。
例えば:
echo bindec("101"); // 出力 5
echo decbin(5); // 出力 "101"
10進数があり、バイナリ表現の$ POSビット(右から左からカウントされる)が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; // 右から2少し,0ベースインデックス,バイナリでは、そうです1
if (isBitSet($number, $position)) {
echo "第 {$position} 少し是1";
} else {
echo "第 {$position} 少し不是1";
}
?>
出力:
第 2 少し是1
数字の数は右から左にカウントされ、最低数字は0です。
decimal数をバイナリ文字列に変換するためにdecbin()を使用する場合、文字列の長さは予想されるビット数よりも少なくなり、長さを超えるビットはデフォルトで0と見なされます。
複数のビットを判断したい場合は、ループまたはビット操作を組み合わせることができます。
Decbin()とString Indexを使用すると機能を達成できますが、ビット操作効率は高く、書き込み方法はより単純です。
function isBitSetBitwise($number, $pos) {
return (($number >> $pos) & 1) === 1;
}
上記の関数を使用して、特定のビットが1かどうかを判断することもできます。
この記事では、PHPのbindec()およびdecbin()関数を使用して、特定のバイナリが1であるかどうかを判断する方法を紹介します。単純な学習とバイナリビット処理の理解には非常に役立ちますが、実際のプロジェクトでは、ビット操作を使用してパフォーマンスとコードの読みやすさを改善することをお勧めします。