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

0x3FF1111111111二进制数,这意味着它的按位与运算将为您提供 . 的最后 10 位num

于 2012-07-17T04:56:09.903 回答
2

将十六进制转换为二进制,0x3FF == 0b1111111111.

执行按位与,因此如果将它们设置为打开,&它只会保留低位。
这保证了答案不大于 0x3FF == 1023,因此答案被保存到 ashort中,因为我们知道它适合一个。

于 2012-07-17T04:57:17.293 回答
0

它只保留最右边的 10 位。

于 2012-07-17T04:57:55.057 回答
0

java 运算符&是“按位与”,这意味着两个操作数的每一位都被与在一起,1如果两个对应的位都是,则留下 a 1

0x3ff是 binary 1111111111,因此与它进行与运算将屏蔽除最低十位之外的所有位。

强制转换为short(16 位数字格式)无效。

于 2012-07-17T04:58:09.683 回答