svr*_*svr 5 c kr-c bit-manipulation
练习是:写一个函数setbits(x,p,n,y)返回x,其中n位从位置p开始,设置为y的最右边n位,其他位保持不变.
我尝试解决方案是:
#include <stdio.h>
unsigned setbits(unsigned, int, int, unsigned);
int main(void)
{
printf("%u\n", setbits(256, 4, 2, 255));
return 0;
}
unsigned setbits(unsigned x, int p, int n, unsigned y)
{
return (x >> (p + 1 - n)) | (1 << (n & y));
}
Run Code Online (Sandbox Code Playgroud)
这可能不正确,但我在正确的道路上吗?如果没有,我做错了什么?我不确定为什么我不完全理解这一点,但我花了大约一个小时试图想出这个.
谢谢.
这是你的算法:
mask.mask2.Andx与mask2的反转.Andy带面具,左移p次.Or 这两个操作的结果,并返回该值.