Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/226.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 - Fatal编程技术网

Php 是否将按位/二进制数还原为值数组?

Php 是否将按位/二进制数还原为值数组?,php,Php,我有一个数据列表,其中附加了一个值,该值在上升时不断翻倍: 0 = value 0 1 = value 1 2 = value 2 4 = value 3 8 = value 4 16 = value 5 32 = value 6 64 = value 7 128 = value 8 256 = value 9 512 = value 10 我也得到了数字x 假设x=76 从视觉上看,我可以看到值7(64)、值4(8)和值3(4)总计为76 我需要做的是,取x,通过一

我有一个数据列表,其中附加了一个值,该值在上升时不断翻倍:

0   = value 0
1   = value 1
2   = value 2
4   = value 3
8   = value 4
16  = value 5
32  = value 6
64  = value 7
128 = value 8
256 = value 9
512 = value 10
我也得到了数字x

假设x=76

从视觉上看,我可以看到值7(64)、值4(8)和值3(4)总计为76

我需要做的是,取x,通过一个函数运行它,然后返回一个值数组

我试着反向遍历所有的数字,并取下使用的值,但是我被很多if语句弄糊涂了

是否有内置的PHP函数来执行此操作?还是我看错了


谢谢

也许你在找这个-

function getArray($x){
    $ar = array();
    for($i = 0 ; $i < 16; $i++){
        if( ($x&(1<<$i)) != 0 ){

            array_push($ar, (1<<$i));

            // if you need positions; you should use it instead of above line
            //array_push($ar, ($i+1));

        }
    }
    return $ar;
}

print_r( getArray(76) );
备用输出将是(如果使用
数组推送($ar,($i+1));
)-

说明:


二进制
76
以16位显示
00000000 01001100
。我运行了一个从最低有效位(LSB)到最高有效位(MSB)(0-16)的循环。在每个循环中,我生成一个新的数字,它只包含
I'th
位作为
1
,其余的位是
0
。为了生成它,我使用了移位运算符
(1)这被称为
二进制
。看起来像是=2^(value-1),但是第一个值并没有加倍;作为求和的一部分使用它也是无用的。0仍然可以返回,但如果返回0,我可以编程使其不放入任何内容,因此我可以执行if>=1 do函数等;
Array (
    [0] => 4
    [1] => 8
    [2] => 64  
)
Array
(
    [0] => 3
    [1] => 4
    [2] => 7
)