私は誰かが実際にこのラインで何が起こっているのかを説明することができます、私は次の行charをbyteに変換するには?
stringBytes[i] = (byte) (stringChars[i] & 0x00FF);
に出くわしたオープンソースコードを勉強していました?
私は誰かが実際にこのラインで何が起こっているのかを説明することができます、私は次の行charをbyteに変換するには?
stringBytes[i] = (byte) (stringChars[i] & 0x00FF);
に出くわしたオープンソースコードを勉強していました?
CharはJavaの2バイトから成りますが、もちろんバイトは1バイトです。この操作中のSO
:それは1バイトにする:
stringBytes[i] = (byte) stringChars[i] & 0x00FF
char値(16ビット)数0x00FFに(0000 0000 1111 1111バイナリ)とバイナリ論理積されています。
バイナリANDINGを8 0s and 8 1s
とすると、基本的には8ビットをマスクしてchar値の最上位ビットまたは最上位ビット(MSB)をマスクしているため、最上位ビットまたは最下位ビット(LSB)はそのまま残ります。次にコードは、キャスト(byte)
を使用してバイトに結果の値を割り当てます。それ以外の場合はint
の値です。
0x00FFとの論理積は、最後の8個の有効ビットと0個の他のビットのみを保持します。
E.g.:
0xD2A5 & 0x00FF = 1101001010100101 & 0000000011111111 = 0000000010100101 = A5
A5は本当に0xA5でなければならないと確信しています。ちょうど一貫性のためです。 – Chexxor
「&0x00FF」は冗長です。 –