题目
编写一个函数 invert(x, p, n),该函数返回对x 执行下列操作后的结果值:将x中从第p位开始的n个(二进制)位求反(即,1 变成0,0 变成1),x的其余各位保持不变。
题目分析
假设从第p位开始向左操作。
代码实现
#include
unsigned inverttemp(unsigned x, int p, int n);
int main()
{
int a;
a = 235;
printf("%d\n", inverttemp(a, 4, 3));
}
unsigned inverttemp(unsigned x, int p, int n)
{
int i, j, m;
i = (x >> p) & ~(~0 << n);
printf("i=%d\n", i);
i = (~i) & ~(~0 << n);
x = (x & ~(~0 << p)) | ((((x >> (p + n)) << n) | i) << p);
printf("i=%d\n", x);
return x;
}