Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/249.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 查找第一个零位_Php_Binary - Fatal编程技术网

Php 查找第一个零位

Php 查找第一个零位,php,binary,Php,Binary,用PHP查找第一个零位最简单的方法是什么 例如,假设我有一个整数47,它是111101,我怎么能发现第5位是第一个未设置的位?这需要满足不同整数的需要。使用decbin返回0和1的字符串。 然后,使用strpos查找前0个字符 $str = decbin(47); $result = strpos($str, '0'); 如果您不想使用$i作为计数器,您可以做一些额外的计算: $value = 47; $j = 1; while (true) { if (($value &

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

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

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

$str = decbin(47);
$result = strpos($str, '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启动。

@Elliot Lings:您将获得否决票,因为您自己没有表现出解决问题的任何努力。您已经尝试过哪些方法但失败了?你有没有搜索过互联网?我会考虑然后再看一看。这或是一些我数学知识之外的漂亮的数学公式。位运算符,如&?@Mark Baker:is&只够了?@zerkms,你需要&and或strcspnsprintf“%b”,47,'0',虽然这将返回255的8而不是false:为什么我从来没有看到代表低于10k的人建议sprintf?@Fluffeh记录在案,我喜欢斯普林特
$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;