我正在实现一个 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。
最佳答案
我认为您的程序正在运行。您唯一需要做的就是用二进制表示数字。
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);
}
这是你想要的吗?
关于c - C 中的反转函数不起作用。按位运算符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12459971/