ホームページ  >  記事  >  Java  >  Java では、「value」が符号付きバイトであるにもかかわらず、「value & 0xff」が符号なしの値を生成するのはなぜですか?

Java では、「value」が符号付きバイトであるにもかかわらず、「value & 0xff」が符号なしの値を生成するのはなぜですか?

DDD
DDDオリジナル
2024-11-02 02:45:02521ブラウズ

Why does `value & 0xff` produce an unsigned value in Java, even though `value` is a signed byte?

Java での値と 0xff によるビット単位の操作

この Java コード スニペットでは、

<code class="java">byte value = 0xfe; // corresponds to -2 (signed) and 254 (unsigned)
int result = value & 0xff;</code>

という疑問が生じます。 : value と 0xff の間のビット単位の AND 演算 (&) は、期待どおり -2 (符号付き) ではなく 254 (符号なし) という結果を生成するのはなぜですか?

C とは異なり、Java では byte は符号付き型です。ビット単位の操作を行わずに int に値を代入すると、符号付きの値 -2 になります。ただし、& を 0xff とともに使用すると、意図した符号なしの値が得られます。

ここで重要なのは、& は int 値に対して動作するということです。値 (バイト) が & とともに使用される場合、最初に int に変換されます。同様に、0xff は int リテラルです。 & 演算は、結果の最下位 8 ビットに配置された値から 8 ビットのバイナリ値を生成します。

この例では:

  • 値は -2 (11111110) にプロモートされます。バイナリで)
  • 0xff は 255 (バイナリで 11111111)
  • 値 & 0xff を表すため、結果は 254 (バイナリで 11111110)

このビット単位の操作が一般的に使用されます特に低レベルのプログラミングやデータ操作のシナリオにおいて、特定のビットを抽出したり、値の符号なしの性質を維持したりするために使用されます。

以上がJava では、「value」が符号付きバイトであるにもかかわらず、「value & 0xff」が符号なしの値を生成するのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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