有人可以解释以下代码行吗?特别是,我不明白是什么(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 位数字格式)无效。