求教一个c语言函数invert(x,p,n)
函数invert(x, p, n)
返回对x做如下处理得到的值:x从第p位(右对齐的)开始的n位被求反(即:1变成0,0变成1),其余各位保持不变。
我是这样写的
unsigned invert(unsigned x,int p,int n)
{
return (x & ~((~(~0 << n)) << p) |((~x<<p) & (((~0 << n)) << p)) );
}
貌似没错误
但是结果是不对的,为什么?
后来看了一下网上的正确答案
unsigned invert(unsigned x,int p,int n)
{
return x ^ (((1 << n) - 1) << p);
}
这个确实是对的
但是第一个为什么错了?我先把n位取反,再其他位不变,或一下,不就可以了吗?
请教, 为什么我写的那个错了