![](/img/trans.png)
[英]Conversion of a number from binary to decimal Most significant bits (MSB) causing undesireable result
[英]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.