我正在实现一个 C 函数unsigned invert(unsigned x, int p, int n)
,该函数返回 x ,其中从位置 p 开始的 n 位反转,而其他位保持不变。
#include <stdio.h>
unsigned invert(unsigned x, int p, int n);
int main()
{
printf("%u\n", invert(11111111, 5, 4));
printf("%u\n", invert(10, 2, 2));
return 0;
}
unsigned invert(unsigned x, int p, int n)
{
return x^(~(~0<<n)<<p+1-n);
}
这就是我到目前为止所得到的,如果我通过它跟踪函数应该是正确的,但我不断得到第一次测试的 11111163 和第二次测试的 12。