二进制位掩码在php中获取不同的值


Binary bit masking fetch different values in php

我想通过掩码从一个数字中获取不同的值。我已经解释过了。

我有一个数字"1540104",想从中获得相关的二进制值和相关的十进制值。

1540104

1011110000000000000

100000000000000000000=>1048576

0010000000000000000000=>262144

000100000000000000000=>131072

000010000000000000000=>65536

000001000000000000000=>32768

00000000000000000001000=>8

那么如何设置逻辑来获得这些相关的十进制值呢。

这将在您的输入上循环,并回显设置的位的所有十进制值:

$input = 1540104;
$bit = 0;
while ($input > 0) {
  if ($input & 0x1) {
    echo pow(2, $bit);
    echo "<br/>";
  }
  $bit++;
  $input = $input >> 1;
}

我更喜欢上面josh bobruk的答案(因此获得了支持),但这是我的答案:

for ($i=1; $i<=1540104;$i=$i*2) {
    $res = $i & 1540104;
    if ($res) {
        echo "$i: $res<br/>";
    }
}