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
)