有人可以解释以下代码行吗?特别是,我不明白是什么(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
二进制数,这意味着它的按位与运算将为您提供 . 的最后 10 位num
。
将十六进制转换为二进制,0x3FF == 0b1111111111
.
执行按位与,因此如果将它们设置为打开,&
它只会保留低位。
这保证了答案不大于 0x3FF == 1023,因此答案被保存到 ashort
中,因为我们知道它适合一个。
它只保留最右边的 10 位。
java 运算符&
是“按位与”,这意味着两个操作数的每一位都被与在一起,1
如果两个对应的位都是,则留下 a 1
。
0x3ff
是 binary 1111111111
,因此与它进行与运算将屏蔽除最低十位之外的所有位。
强制转换为short
(16 位数字格式)无效。