所以我遇到的问题是获取16位以上数字的最低有效和最高有效16位,但不一定具有任何特定长度。
如果数字是一个32位的整数,我相信我可以这样做:
int Num=0xFFFFFFFF
short most = (short)(Num & 0xFFFF0000);
short least =(short)(Num & 0x0000FFFF);
结果:
最多= 0xFFFF 至少= 0xFFFF
从理论上讲,这应该为我提供一个最小的和最高有效的16位短数字。但是问题是我需要能够对任意数量的位数执行此操作,因此该方法将不起作用,因为它将改变我需要的位数。有没有更好的方法来获取这些值?
似乎有一种相当简单的方法可以做到这一点,但我在网上找不到任何东西。
谢谢
答案 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;
}