TCPL 2-6

题目:编写一个函数setbits(x, p, n, y), 该函数返回对x执行下列操作后的结果值:将x中从第p位开始的n个(二进制)位设置为y中最右边n位的值,x的其余各位保持不变。

对这个题目有两个理解,将x中从p位开始的n位 设置 到 y最右边(返回结果以y为标准),或者将y中最右边的n位 设置 到x中 从p位开始 的n位(返回结果以x为标准)。

我将两种结果都写了出来。

下面是第一种:

unsigned Setbits(unsigned x, int p, int n, unsigned y)
{
    return  (x & ~(~0 << n) << p ) >> p | (y & (~0 << n));
}

然后是第二种

unsigned setbits(unsigned x, int p, int n, unsigned y)
{
    return (x & ~ ( ~ ( ~0 << n ) << p)) | ( ( y & ( ~ ( ~0 << n ) ) ) << p);
}

猜你喜欢

转载自blog.csdn.net/qq_38035641/article/details/86601125
2-6