小编svr*_*svr的帖子

k&r与位操作混淆

练习是:写一个函数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)

这可能不正确,但我在正确的道路上吗?如果没有,我做错了什么?我不确定为什么我不完全理解这一点,但我花了大约一个小时试图想出这个.

谢谢.

c kr-c bit-manipulation

5
推荐指数
1
解决办法
1689
查看次数

标签 统计

bit-manipulation ×1

c ×1

kr-c ×1