写一个函数将0-15位复制到16-31

时间:2015-03-20 18:54:20

标签: c++

如何写一个函数将0-15位复制到16-31?

unsigned int n = 10; // 1010

copyFromTo(n);
assert(n == 655370);

n = 5;
copyFromTo(n);
assert(n == 327685);

n = 134;
copyFromTo(n);
assert(n == 8781958);

3 个答案:

答案 0 :(得分:2)

您想要复制0-15到16-31中的位。您应该理解,乘以2相当于将数字位移到左侧(移到更高位)。

如果您的号码为nn << 16会将您的号码16位向左移。这相当于将n乘以2的16次幂,恰好是65536。

要复制这些位,并将原始位保留在0-15,命令n = n + (n << 16);应该有效。但是,问题是(正如评论中所指出的),高位16-31位仍然在n +项中设置。我们还需要清除这些位。请注意,65535对应于2 ^ 16 - 1,并且前0-15位为1,其他为0.所以正确的命令为n = (n && 65535) + (n << 16);

答案 1 :(得分:1)

这样做:

void copyFromTo(unsigned int& n)
{
    n = (n & 0xffff) * 0x00010001;
}

答案 2 :(得分:0)

n&lt;&lt; 16位移位会做到这一点,将低位移到上位? (编辑)然后,只将低16位复制到其中