私は値でbyte
配列を比較したとき、私は、なぜ知って興味...バイト値を比較しますか?
boolean match = ((data[0] & 0xFF) == 0xFE);
... ...
boolean match = (data[0] == 0xFE);
...が行う一方で、true
を返します。ない? data
は、私はそれが符号拡張をintには0xFFを促進に関係していると信じている
data[0] = (byte) 0xFE;
私は値でbyte
配列を比較したとき、私は、なぜ知って興味...バイト値を比較しますか?
boolean match = ((data[0] & 0xFF) == 0xFE);
... ...
boolean match = (data[0] == 0xFE);
...が行う一方で、true
を返します。ない? data
は、私はそれが符号拡張をintには0xFFを促進に関係していると信じている
data[0] = (byte) 0xFE;
boolean match = ((data[0] & 0xFF) == 0xFE);
は0xFFが整数であるとして、この表現がintに、あなたのバイトdata[0]
をスケールアップし、第二のint 0xFE(254)
に括弧内に何と比較します整数を比較します。 data[0]
が(byte)0xFE
であると言うと、最初は整数0xFE
にスケールされ、整数0xFE
と比較されるので、これは機能します。
boolean match = (data[0] == 0xFE);
はint型0xFE
にバイトを比較しています254
data[0] = (byte) 0xFE;
はバイトである(それはsignedだ)、その値は-2
です。
-2
は254
と等しくないため、整数[0xFE
]と比較する前に、データ[0]をバイトとして比較するか、整数と比較する必要があります。
単純比較は
boolean match = (data[0] == (byte)0xFE);
大変ありがとう! –
とbyte
配列です。最初の式では、0xFEもintに昇格されるため、data[0] & 0xFF
の結果もintであり、intの比較が行われます。
しかし、2番目のコードサンプルでは、操作は実行されていないため、intへの昇格はありません。つまり、data [0]はintに昇格しませんが、0xFEはintになります。
あなたはどのコンパイラの警告を得ているだろうか?私はそれらが整数リテラルかもしれないと思う(そして、比較は、配列と正の整数リテラルのあなたの負の数で、intとして行われるかもしれない)。 – Thilo