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 ビットのバイナリ値を生成します。
この例では:
このビット単位の操作が一般的に使用されます特に低レベルのプログラミングやデータ操作のシナリオにおいて、特定のビットを抽出したり、値の符号なしの性質を維持したりするために使用されます。
以上がJava では、「value」が符号付きバイトであるにもかかわらず、「value & 0xff」が符号なしの値を生成するのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。