代码之家  ›  专栏  ›  技术社区  ›  rghome

在Java中,最有效的方法是扩展任意长度的位模式?

  •  0
  • rghome  · 技术社区  · 7 年前

    比方说,我已经把三个10位有符号整数打包成一个Java整数。

    我可以轻松提取10位:

    int unpacked = packed & 0x3FF;
    packed >>= 10;
    etc ...
    

    但现在我需要签名扩展顶部位(从右边第9位)。有没有一种快速的方法可以做到这一点,借助于测试顶端位和设置?

    也许有一种更好的拆箱方法可以使标志保持原位。

    1 回复  |  直到 7 年前
        1
  •  3
  •   Joop Eggen    7 年前
    int signed = (packed << (32 - 10)) >> 10;
    

    AS >>> 无符号右移,和 >> 签字的右移。

    推荐文章