0

マスキングで1つの数値から異なる値を取得したいのですが、以下に説明しました。

私は 1 つの数字「1540104」を持っており、関連する 2 進値とそれに関連する 10 進値を取得したいと考えています。

1540104

101111000000000001000

100000000000000000000 => 1048576

001000000000000000000 => 262144

000100000000000000000 => 131072

000010000000000000000 => 65536

000001000000000000000 => 32768

000000000000000001000 => 8

したがって、この関連する 10 進数値を取得するロジックを設定する方法は次のとおりです。

4

2 に答える 2

1

これは入力をループし、設定されているビットのすべての 10 進数値をエコーアウトします。

$input = 1540104;
$bit = 0;

while ($input > 0) {
  if ($input & 0x1) {
    echo pow(2, $bit);
    echo "<br/>";
  }
  $bit++;
  $input = $input >> 1;
}
于 2013-08-23T05:20:46.153 に答える
0

上記のjosh bobrukの回答の方が気に入りました(したがって、賛成です)が、とにかく私のものです:

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

}
于 2013-08-23T05:27:03.520 に答える