有人可以解释以下代码行吗?特别是,我不知道(short) x & 0x3FF
做了什么?
int num = ... //some number.
return (short) num & 0x3FF;
答案 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位数字格式)无效。