4

誰かが次のコード行を説明できますか?特に、何がわからないの(short) x & 0x3FFですか?

int num = ... //some number.
return (short) num & 0x3FF;
4

5 に答える 5

9

結果が常に 0 ~ 1023 になるように、数値の上位ビットをゼロにします。基本的には modulo(num, 1024) (num の正の値) と同じです。

より広い文脈を見ないと、なぜこれがここにあるのかを知ることは不可能ですが、それはそれがすることです.

于 2012-07-17T04:55:24.903 に答える
7

0x3FF11111111112 進数の数値です。これは、ビット単位の AND で の最後の 10 ビットが得られることを意味しますnum

于 2012-07-17T04:56:09.903 に答える
2

16 進数から 2 進数への変換、0x3FF == 0b1111111111.

&ビットごとの AND を実行するため、下位ビットがオンに設定されている場合にのみ下位ビットが保持されます。
これにより、答えが 0x3FF == 1023 を超えないことが保証されるため、答えは に保存されshortます。

于 2012-07-17T04:57:17.293 に答える
0

右端の 10 ビットのみが保持されます。

于 2012-07-17T04:57:55.057 に答える
0

Java 演算子&は「ビットごとの AND」です。つまり、2 つのオペランドの各ビットが AND 演算され、両方の対応するビットがである1場合は が残ります。1

0x3ffは binary1111111111であるため、これと AND 演算すると、最下位 10 ビットを除くすべてがマスクされます。

short(16 ビット数値形式)へのキャストは効果がありません。

于 2012-07-17T04:58:09.683 に答える