找到第一个零位

Ell*_*ngs -1 php binary

用PHP找到第一个零位的最简单方法是什么?

例如,假设我有一个整数47,即111101,我怎么能发现第5位是第一个未设置的位?这需要努力满足不同的整数.

Mar*_*ker 5

$value = 47;
$i = $j = 1;

while (true) {
    if (($value & $j) == 0) {
        break;
    }
    $j = $j << 1;
    $i++;
}
echo "bit $i is 0";
Run Code Online (Sandbox Code Playgroud)

如果你想消除使用$ 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;
Run Code Online (Sandbox Code Playgroud)

+1是必要的,因为你将二进制文件作为第1位而不是第0位启动