【发布时间】:2019-02-13 16:43:23
【问题描述】:
假设,例如,我将三个 10 位有符号整数打包成一个 Java 整数。
我可以轻松提取这 10 位:
int unpacked = packed & 0x3FF;
packed >>= 10;
etc ...
但现在我需要对最高位(右起第 9 位)进行符号扩展。有没有一种快速的方法来测试最高位和设置?
也许有一种更好的拆包方法可以让标志留在原处。
【问题讨论】:
-
高 32-10 位有两个可能的值 - 全为 1 或全为 0。所以你可以在一个(有条件的)步骤中做到这一点。
-
是的 - 我会纠正我的问题,但我可以在没有 if 语句的情况下这样做吗?
-
也许我遗漏了一些东西,但 0x2ff 的结果应该是什么? (0b10 1111 1111)?根据接受的答案是十进制的 -255 还是 -1052672?
-
我正在查询,但我认为如果你得到正确的数字,向上然后向下移动将起作用。
-
@rghome 将 0x2ff 向上移动然后向下移动会给你 -257 (0b1111 1111 1111 1111 1111 1110 1111 1111)
标签: java bit-manipulation sign-extension