我正在实现一个C函数unsigned invert(unsigned x, int p, int n)
,该函数返回x,并返回位置p开始的n位,并保持其他位不变。C中的反转功能不起作用。按位运算符
#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第二次测试。
请解释你的功能背后的逻辑(在这个过程中,你可能会找出你错在哪里) –
是11111111和10应该是二进制的?我敢肯定c不支持二进制文字...尝试这些数字0xFF和0x2。 –
'11111111'是一个十进制整数,不是二进制。你需要传递一个十六进制值并将其转换。像'0xFF'(11111111二进制) –