Java における value & 0xff の謎を明らかにする
Java では、& 演算子は 2 つの整数に対してビットごとの AND 演算を実行し、結果として新しい整数。ただし、1 つのオペランドがバイト型の場合、興味深い現象が発生します。
次のコードを考えてみましょう:
<code class="java">byte value = 0xfe; // corresponds to -2 (signed) and 254 (unsigned) int result = value & 0xff;</code>
結果を出力すると、予想を裏切って、驚くべきことに 254 (符号なし) が得られます。この動作を理解するには、Java の型システムの微妙な違いを詳しく調べる必要があります。
Java では、byte は符号付き型であり、正の値と負の値の両方を表すことができることを意味します。ただし、整数に昇格すると、符号なしの値として扱われます。 & 演算子が値 (整数に昇格) と定数 0xff (符号なし整数リテラル) に適用されると、結果は昇格された値の下位 8 ビットを含む符号なし整数になります。
その他つまり、結果は value と同じバイナリ表現になり、8 番目のビットより上のすべてのビットが 0 にクリアされます。これにより、結果は、value から符号ビットを破棄して得られた符号なしの値に事実上設定されます。
したがって、value & 0xff は、元の 8 ビット値を維持しながら、符号付きバイトを符号なし整数に変換する手法を提供します。これは、符号ビットが関連していない、または必要とされていないデータを扱う場合に便利です。
以上がJava で「value」がバイトの場合、「value & 0xff」が符号なし整数を返すのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。