-1

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

例如,假设我有一个整数 47,即 111101,我怎样才能找出第 5 位是第一个未设置的位?这需要工作以适应不同的整数。

4

2 回答 2

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;

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

于 2013-09-13T09:31:21.890 回答
4

用于decbin返回一个 0 和 1 的字符串。然后,使用 strpos 查找前 0 个字符。

$str = decbin(47);
$result = strpos($str, '0');
于 2013-09-13T09:29:03.667 回答