1

私は自分が何をしているのか本当にわからないことを告白します!SecondLifeからいくつかのデータを取得し、PHPで解析しています。データはllGetRegionFlagsからの整数であり、私の場合は1048592を返します。

次に、PHPでビット単位の比較を行って、どのフラグがtrue/falseであるかを判別する必要があります。たとえば、0x00000040は「ブロックテラフォーム」フラグに使用されます。

表記はフラグごとに16進数であり、テストする整数があります。PHPマニュアルでは整数を提案し、例を2進数で示しています。

だから私の質問は、整数といくつかの16進フラグが与えられた場合、PHPでビット単位の比較を行うにはどうすればよいですか?ブレインフライド!前もって感謝します

4

4 に答える 4

1

特定のビットがオンになっているかどうかを判断するには、&(AND)演算子を使用します。

if ($data & 0x00000040) {
    // block terraform flag is true
}

ビットがオンになっている場合、AND演算子は正の数を返します。オフにすると、AND演算子はゼロになります。

于 2013-02-21T15:28:50.410 に答える
0

単一のAND &/ORを使用する|

if ($value1 & $value2) { }

PHPマニュアルで詳細を説明しています:http://php.net/manual/en/language.operators.bitwise.php

于 2013-02-21T15:28:18.090 に答える
0

必要なビットを定義し、それらをチェックしてきれいに見えるようにすることができます。すなわち

define('BLOCK_TERAFORM', 0x00000040);

....

if($data & BLOCK_TERAFORM) {
  ... do something ...
}
于 2013-02-21T15:30:11.233 に答える
0

通常、ビットフラグは次のようなコードでチェックされます。

$blockTerraformFlag = 0x00000040;
$isBlockTerraform = (($RegionFlags & $blockTerraformFlag) == $blockTerraformFlag);
于 2013-02-21T15:35:15.050 に答える