Як витягти всі бітові флагі в PHP

Сніппет

Приклад із виведенням усіх флагів:

downloadcopy
<?php
$value = 1153;
function hasStaticType($num, $type) {
    return ($num & $type) ? true : false;
}
$i=0;
while($type<$value){
    $type = 1 << $i;
    if(hasStaticType($value,$type)){
        echo $type.PHP_EOL;
    }
    $i++;
}

Приклад функції, яка поверне усі флагі в масиві:

downloadcopy
<?php
function hasStaticType($num, $type) {
    return ($num & $type) ? true : false;
}
function getAllFlags($value) {
    $res = [];
    $i = $type = 0;
    while($type < $value){
        $type = 1 << $i;
        if(hasStaticType($value,$type)){
            $res[] = $type;
        }
        $i++;
    }
    return $res;
}


/* Використання*/

$value = 1153;
print_r(getAllFlags($value));