1. ホーム
  2. java

[解決済み] Javaでvalue & 0xffは何をするのですか?

2022-03-07 19:55:41

質問

次のようなJavaコードがあります。

byte value = 0xfe; // corresponds to -2 (signed) and 254 (unsigned)
int result = value & 0xff;

印刷すると254になるのですが、このコードがどのように動作するのかが全くわかりません。もし & 演算子は単純にビット演算ですが、なぜバイトではなく整数になるのでしょうか?

どのように解決するのですか?

設定する result の8ビットを(符号なし)値に置き換えたものです。 value の下位8ビットに result .

このようなものが必要な理由は byte は、Javaでは符号付きの型です。もし、そのまま書いたら

int result = value;

では result という値で終わります。 ff ff ff fe ではなく 00 00 00 fe . さらに微妙なのは & に対してのみ動作するように定義されています。 int 1 ということで、どうなるかというと

  1. value が昇格し int ( ff ff ff fe ).
  2. 0xffint リテラル( 00 00 00 ff ).
  3. & を適用して、目的の値を得ることができます。 result .

(に変換することがポイントです)。 int が起こる 以前 その & 演算子が適用されます)。

1 <サブ まあ、ちょっと違うか。その & 演算子が動作するのは long の値も同様に、どちらかのオペランドが long . しかし byte . Java言語仕様のセクションを参照してください。 15.22.1 5.6.2 .