繁体   English   中英

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

[英]Getting 16 least and most significant bits of an arbitrary length binary number

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

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

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

结果:

最高= 0xFFFF最低= 0xFFFF

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

似乎会有一个相当简单的方法来执行此操作,但是我在网上找不到任何内容。

谢谢

之前的主要主题。 您的代码无法获得最大收益。 您应该右移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;
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM