1. 概要

0xff は、 16進数システム(基数16)で表される数値です。16進数の2つのF数値で構成されます。 ご存知のように、16進数の F は、2進数システムの1111に相当します。 したがって、バイナリの0xffは11111111です。

この記事では、0xff値の使用方法について説明します。 さらに、複数のデータ型を使用してそれを表現する方法と、 オペレーター。 最後に、それを使用することに関連するいくつかの利点を確認します。

2. さまざまなデータ型で0xffを表す

Javaでは、 0x プレフィックスとそれに続く整数リテラルを使用して、16進数(基数16)として解釈される数値を定義できます。

0xffは、符号なし10進数で255、符号付き10進数で-127、およびバイナリで11111111に相当します。

したがって、int変数を0xffの値で定義すると、 Javaは32ビットを使用して整数を表すためです。 0xffの値は255です。

int x = 0xff;
assertEquals(255, x);

ただし、 byte変数を値0xffで定義すると、Javaは8ビットを使用するバイトを表し、バイトは符号付きデータ型、[ X169X]0xffの値は-1です。

byte y = (byte) 0xff;
assertEquals(-1, y);

ご覧のとおり、 byte変数を0xff値で定義する場合、 byteの範囲が原因で、byteにダウンキャストする必要があります。 データ型は-128から127です。

3. の一般的な使用法 &0xff 手術

&演算子はビット単位のAND演算を実行します 。 2つのオペランドの対応するビットが1の場合、ビット単位のANDの出力は1です。 一方、オペランドのいずれかのビットが0の場合、対応するビットの結果は0と評価されます。

0xffは最後の8ビットに8つあるため、ビット単位のAND演算単位元になります。 したがって、 x&0xff 手術、 xから下位8ビットが得られます x の数が255未満の場合でも、同じであることに注意してください。 それ以外の場合は、xの下位8ビットになります。

一般的に、 &0xff演算は、数値から下位8ビットを抽出する簡単な方法を提供します 。 実際にこれを使用して、必要な8ビットを抽出できます。これは、最下位ビットにしたい8ビットのいずれかを右にシフトできるためです。 次に、を適用してそれらを抽出できます &0xff 手術。

使用する利点のいくつかを説明する例を見てみましょう &0xff さらに詳細に。

4. &を使用したRGBA色座標の抽出 0xff

RGBAシステムの色を表す32ビットで格納された整数xがあると仮定します。これは、各パラメーター(R、G、B、およびA)に8ビットがあることを意味します。 :

  • R = 16(バイナリで00010000)
  • G = 57(バイナリで00111001)
  • B = 168(バイナリで10101000)
  • A = 7(バイナリで00000111)

したがって、バイナリの x は、00010000 00111001 10101000 00000111として表されます。これは、10進数の272214023に相当します。

これで、 x の値が10進数になり、各パラメーターの値を抽出する必要があります。

ご存知のように、>>操作はビットを右にシフトします。 したがって、(10000000 00000000 >> 8)を実行すると、10000000が得られます。 その結果、各パラメーターの値を抽出できます

int rgba = 272214023;

int r = rgba >> 24 & 0xff;
assertEquals(16, r);

int g = rgba >> 16 & 0xff;
assertEquals(57, g);

int b = rgba >> 8 & 0xff;
assertEquals(168, b);

int a = rgba & 0xff;
assertEquals(7, a);

5. 結論

このチュートリアルでは、&0xff操作が、最後の8ビットの値のみを残し、残りのビットを無視する方法で変数を効果的に分割する方法について説明しました。 これまで見てきたように、この操作は、変数を右にシフトし、シフトされたビットを抽出する必要がある場合に特に役立ちます。

いつものように、この記事で紹介するコードは、GitHubから入手できます。