23

byte配列と値を比較するとき、その理由を知りたいです...

boolean match = ((data[0] & 0xFF) == 0xFE);

...戻りますがtrue...

boolean match = (data[0] == 0xFE);

...ではない?databyte配列です

data[0] = (byte) 0xFE;
4

2 に答える 2

26
boolean match = ((data[0] & 0xFF) == 0xFE);

0xFF は整数であるため、整数を比較します。この式は、バイトを int にスケールアップし data[0]、括弧内を 2 番目の int と比較します0xFE(254)。あなたが言うようdata[0](byte)0xFE、最初に整数にスケーリングされ、整数0xFEと比較される0xFEため、これは機能します。

boolean match = (data[0] == 0xFE);

byte を int と比較します0xFE254

data[0] = (byte) 0xFE; 

はバイトであり(署名されているため)、その値は-2です。

-2は と等しくない254ため、 data[0] をバイトとして比較するか、整数と比較する前に整数にスケールアップする必要があります0xFE

より簡単な比較は次のとおりです。

boolean match = (data[0] == (byte)0xFE);
于 2012-11-15T06:19:47.353 に答える
3

0xFF を符号拡張付きの int に昇格させることに関係していると思います。最初の式では、0xFE も int に昇格されるため、結果data[0] & 0xFFも int になり、int の比較が行われます。

しかし、2 番目のコード サンプルでは、​​操作が行われていないため、int への昇格はありません。つまり、data[0] は int に昇格されませんが、0xFE は int です。

于 2012-11-15T06:12:08.247 に答える