题目:编写一个函数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);
}