C中的反转功能不起作用。按位运算符

时间:2012-09-17 13:13:28

标签: c

我正在实现一个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。

1 个答案:

答案 0 :(得分:2)

我认为您的计划正在运作。您唯一需要做的就是用二进制表示数字。

unsigned invert(unsigned x, int p, int n); 

int main()
{
    printf("%x\n", invert(0b11111111, 5, 4));
    printf("%x\n", invert(0b10, 2, 2));

return 0;

}

unsigned invert(unsigned x, int p, int n)

{   
     return x^(~(~0<<n)<<p+1-n);
}

这是你想要的吗?