按位& 0x3FF吗?

时间:2012-07-17 04:52:46

标签: java primitive-types

有人可以解释以下代码行吗?特别是,我不知道(short) x & 0x3FF做了什么?

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

5 个答案:

答案 0 :(得分:6)

它将数字的最高位清零,结果总是在0到1023之间。它与modulo(num,1024)基本相同(对于num的正值)。

如果没有看到更广泛的背景,就不可能知道为什么这就在这里,但这就是它的作用。

答案 1 :(得分:5)

0x3FF是二进制数1111111111,这意味着与它一起使用的bitwize AND将为您提供num的最后10位。

答案 2 :(得分:2)

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

&执行按位AND,因此只有在设置为打开时才会保留低位。
这可以保证答案不大于0x3FF == 1023,因此答案会保存到short,因为我们知道答案只适合一个。

答案 3 :(得分:0)

它只保留最右边的10位。

答案 4 :(得分:0)

java运算符&是“按位AND”,意味着两个操作数的每个位都进行AND运算,如果两个对应的位是{{1 1}}。

1是二进制0x3ff,因此与其进行AND运算将掩盖除最低十位之外的所有内容。

转换为1111111111(16位数字格式)无效。