练习是:
编写一个函数 setbits(x,p,n,y),返回 x,并将从位置 p 开始的 n 位设置为 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));
}
这可能是不正确的,但我走的路正确吗?如果不是,我做错了什么?我不确定为什么我不完全理解这一点,但我花了大约一个小时试图想出这一点。
Thanks.
这是你的算法:
- 如果 n 为 0,则返回 x。
- 取 1,左移 n 次,然后减 1。调用此
mask
.
- 左移掩码 p 次称之为
mask2
.
-
And
x 与 mask2 的倒数。And
y 带掩码,左移 p 次。
-
Or
这两个操作的结果,并返回该值。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)