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

Write a function to copy 0-15 bits into 16-31

本文关键字:0-15位 复制 16-31 函数 一个      更新时间:2023-10-16

如何编写将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);

您想要将0-15中的位复制到16-31。你应该明白,乘以2相当于将数字的位向左移动一次(移动到更高位)。

如果您的号码是n,则n << 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);

这样做:

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

n<lt;16来移位位就可以了,把低位移到高位?(已编辑)然后,只将较低的16位复制到中