0

bit-wise check私はゲームをプレイし、データベースで 100663296 を GM リーダーに設定しましたが、データベースのこのフィールドにもさまざまなことが書き込まれるため、その番号を100794368 に変更します。番号は 2 番目の番号と同じです。Google で検索しましbit-wise checksたが、チェックに何を使用すればよいかわかりません。

上記のものを含む、変更される他のいくつかの数値を次に示します。

predefined number   new changed number/ever changing number.
100663296       =       100794368
67108864        =       67239936
117440512       =       2231767040

では、これらの数値を確認するにはどうすればよいでしょうか。

そして、これは、数値の変化に気付く前に使用していたコードの一部です。

if (playerData[i].nameflags == 67108864) 
{ 
    playerRows += '<img src ="icons/GM-Icon.png" alt="GM" title="GM"></img>';
}

答えはBergiにthx。

    if (playerData[i].nameflags & 0x400000 /* === 0x400000 */)

この縫い目はうまく機能します。

また、vr1911428 と他のすべての人にも感謝します。

4

2 に答える 2

0

2 つの整数の完全なビット単位の等価性をチェックする必要がある場合、必要なのは '==' 演算子だけですが、それを使用するには、両方のオペランドが整数であることを保証する必要があります。

left = 12323;
right = 12323;
if (left == right)
   alert("Operands are binary equal; I'll guarantee that. :-)");

ただし、細心の注意を払ってください。オペランドの少なくとも 1 つが数値ではなく数値を表す文字列である場合、両方のオペランドが文字列と見なされ、混乱する結果が得られる可能性があります。

left = "012323";
right = 12323;
if (left != right)
   alert("Operands are not equal, even though they represent 'equal values', as they     are compared as strings.");

一般に、最近では、データ自体ではなく、データを表す文字列を操作しようとする試みは、初心者にとっては本当に呪われています。そして彼らに説明するのは難しいです。JavaScript で説明するのは特に難しく、型指定の概念自体が非常に複雑で理解しにくいため、幻想的な単純さの背後にあります。

最後に、個別のビットを比較する必要がある場合 (そして、あなたの質問から、この必要性はわかりません)、二項演算子を使用できます。
https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Operators/Bitwise_Operators
基本的には以上です。...................

于 2013-02-28T03:17:59.873 に答える
0

それでは、これらの数値をバイナリ表現 (符号なし整数) に変換しましょう。

> 100663296
00000110000000000000000000000000
> 100794368
00000110000000100000000000000000
> 67108864
00000100000000000000000000000000
> 67239936
00000100000000100000000000000000
> 117440512
00000111000000000000000000000000
> 2231767040
10000101000001100001000000000000

最後の数値は、32 ビットの符号付き整数でのみ機能するJavaScript のビット演算の範囲外であることに注意してください。左端のビットは使用できません。

では、今どのビットを比較しますか? 可能性はたくさんあります。上記のスキームではわかりませんが、右から 27 ビット目 (2 26 = 67108864) を探しているように見えます。それに対して照合するには、バイナリ AND ビットマスクを適用できます。

x & Math.pow(2, 26)

これは再び 2 26またはゼロに評価される必要があります-したがって、真実性を確認できます。ところで、を使用する代わりに、pow16 進数表記を使用できます0x4000000。これで、あなたの状態は次のようになります。

if (playerData[i].nameflags & 0x400000 /* === 0x400000 */)
于 2013-02-28T00:41:00.807 に答える