Javaの&0xff値を理解する
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. 結論
いつものように、この記事で紹介するコードは、GitHubでから入手できます。