Java の「value & 0xff」の奇妙なケースを理解する
Java では、一般的に使用されるビット単位の AND 演算子「&」は、 2 つの整数に対するビット単位の演算。整数値が得られます。ただし、クエリ「value & 0xff」のようにバイトに適用すると、整数の結果が得られるため、多くの人が当惑します。
この謎を解明するために、Java のバイト データ型の基礎を詳しく調べてみましょう。他の数値型とは異なり、バイトは符号付きです。つまり、正の数値と負の数値の両方を表すことができます。この区別は、ビット単位の演算を実行するときに重要になります。
指定されたコードでは、「value & 0xff」は基本的に、16 進リテラルとのビット単位の AND 演算を適用することにより、符号付きバイトの「value」を符号なし整数の「result」に変換します。 0xff (255)。この操作により、「値」の下位 8 ビットのみが「結果」に保持され、負の符号拡張が効果的に削除されます。
このような変換の必要性は、「値」が符号付きであるという事実から生じます。一方、「&」演算子には整数オペランドが必要です。バイト「値」は操作中に自動的に int にプロモートされ、32 ビットの符号付き整数になります。その結果、プロモートされた int 値に対して「&」演算が実行され、結果は元のバイトの最下位 8 ビットを保持したまま int に変換されます。
例として、「value」が11111110 のバイナリ表現 (符号付きバイトとして -2 を表す) の場合、操作「value & 0xff」は結果として 11111110 (符号なし) を生成します。これは、16 進リテラル 0xff が 11111111 のバイナリ表現を持ち、これら 2 つの値のビットごとの AND により、下位 8 ビットを除くすべてのビットが事実上 0 に設定されるためです。
以上が「value & 0xff」が Java バイトを符号なし整数に変換するのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。