ホームページ  >  記事  >  Java  >  Java で「value」がバイトの場合、「value & 0xff」が符号なし整数を返すのはなぜですか?

Java で「value」がバイトの場合、「value & 0xff」が符号なし整数を返すのはなぜですか?

DDD
DDDオリジナル
2024-11-03 05:33:03336ブラウズ

Why does `value & 0xff` return an unsigned integer in Java when `value` is a byte?

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 サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。