ビット単位の演算を理解する: Java の value & 0xff を解明する
この質問は、& を使用してビット単位の演算を実行する Java コード スニペットから生じます。演算子:
<code class="java">byte value = 0xfe; int result = value & 0xff;</code>
この演算を印刷すると、値 254 が生成されるように見えます。ただし、これがどのように機能するかを理解するには、Java のデータ型とビット単位の演算の複雑さをさらに深く掘り下げる必要があります。
ビット単位の演算とデータ プロモーション
Java の & 演算子は次のことを実行します。ビットごとの AND 演算。オペランドの対応するビットが両方とも 1 の場合、結果の各ビットは 1 に設定され、それ以外の場合は 0 に設定されます。通常、この操作の結果は、オペランドと同じ型の値になります。
コード スニペットでは、値は 8 ビットの符号付き整数であるバイトです。値 0xfe は、符号付き表現では -2、符号なし表現では 254 に対応します。もう 1 つのオペランド 0xff は、符号なし 255 を表す int リテラルです。
ただし、& 演算子は int 値に対してのみ動作するように定義されています。したがって、操作が実行される前に、値はまず int (ff ff ff fe) にプロモートされます。
結果の公開
その後、& 操作が、プロモートされた値と int リテラル 0xff (00 00 00 ff) を組み合わせた結果、値 00 00 00 fe になります。これは、結果として出力される符号なし表現の 254 に対応します。
要約すると、式の値 & 0xff は、値の 8 ビットを結果の下位 8 ビットに入れて得られる符号なしの値に結果を設定します。 。これが必要なのは、Java では byte が符号付き型であり、byte から int に直接変換すると不正な符号付き表現になるためです。
以上がコード スニペット「byte value = 0xfe; int result = value & 0xff;」の結果が 254 になるのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。