誰かが次のコード行を説明できますか?特に、何がわからないの(short) x & 0x3FF
ですか?
int num = ... //some number.
return (short) num & 0x3FF;
誰かが次のコード行を説明できますか?特に、何がわからないの(short) x & 0x3FF
ですか?
int num = ... //some number.
return (short) num & 0x3FF;
結果が常に 0 ~ 1023 になるように、数値の上位ビットをゼロにします。基本的には modulo(num, 1024) (num の正の値) と同じです。
より広い文脈を見ないと、なぜこれがここにあるのかを知ることは不可能ですが、それはそれがすることです.
0x3FF
は1111111111
2 進数の数値です。これは、ビット単位の AND で の最後の 10 ビットが得られることを意味しますnum
。
16 進数から 2 進数への変換、0x3FF == 0b1111111111
.
は&
ビットごとの AND を実行するため、下位ビットがオンに設定されている場合にのみ下位ビットが保持されます。
これにより、答えが 0x3FF == 1023 を超えないことが保証されるため、答えは に保存されshort
ます。
右端の 10 ビットのみが保持されます。
Java 演算子&
は「ビットごとの AND」です。つまり、2 つのオペランドの各ビットが AND 演算され、両方の対応するビットがである1
場合は が残ります。1
0x3ff
は binary1111111111
であるため、これと AND 演算すると、最下位 10 ビットを除くすべてがマスクされます。
short
(16 ビット数値形式)へのキャストは効果がありません。