PHP で最初のゼロビットを見つける最も簡単な方法は何ですか?
たとえば、111101 である整数 47 があるとします。5 番目のビットが最初の未設定のビットであることをどのように確認できますか? これは、さまざまな整数に対応するために機能する必要があります。
$value = 47;
$i = $j = 1;
while (true) {
if (($value & $j) == 0) {
break;
}
$j = $j << 1;
$i++;
}
echo "bit $i is 0";
$i をカウンターとして使用するのをやめたい場合は、少し追加の計算を行うことができます。
$value = 47;
$j = 1;
while (true) {
if (($value & $j) == 0) {
break;
}
$j = $j << 1;
}
echo "bit ", (log($j) / log(2) + 1), " is 0", PHP_EOL;
バイナリをビット 0 ではなくビット 1 として開始するため、+1 が必要です。