获取任意长度二进制数的16个最低和最高有效位

时间:2018-09-30 00:13:28

标签: java bit-manipulation bit

所以我遇到的问题是获取16位以上数字的最低有效和最高有效16位,但不一定具有任何特定长度。

如果数字是一个32位的整数,我相信我可以这样做:

int Num=0xFFFFFFFF
short most = (short)(Num & 0xFFFF0000);
short least =(short)(Num & 0x0000FFFF);

结果:

最多= 0xFFFF 至少= 0xFFFF

从理论上讲,这应该为我提供一个最小的和最高有效的16位短数字。但是问题是我需要能够对任意数量的位数执行此操作,因此该方法将不起作用,因为它将改变我需要的位数。有没有更好的方法来获取这些值?

似乎有一种相当简单的方法可以做到这一点,但我在网上找不到任何东西。

谢谢

1 个答案:

答案 0 :(得分:0)

主要主题之前。您的代码无法获得最大收益。 您应该右移4。

short most = (short)((Num & 0xFFFF0000) >> 0x10);

我想你想要这种方法。

// lenMost should be in 0 to 32
int[] divide(int target, int lenMost) {
    int MASK = 0xFFFFFFFF;
    int lenLeast = 32 - lenMost;

    int ret[] = new int[2]();
    // get most
    ret[0] = target & (MASK << lenLeast)
    ret[0] >>= lenLeast;
    // get least
    ret[1] = target & (MASK >> lenMost);

    return ret;
}