c - C 中的反转函数不起作用。按位运算符

标签 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。

最佳答案

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

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/

相关文章:

c - Flatten multi-level double linked list in C - 关于Append函数的疑惑

C fwrite() 不会保存文件中的所有数据

c++ - 如何用 C 在 pcre 中编写适当的模式

c - 分别使用nodejs和c做AES-128-cbc加密时,使用相同的key和IV但结果不同

c - 没有加载调试符号时,gdb 如何解释 `main`?

c - 无变量字符串反转

C程序: multi-word guessing game conversion error

c - 将打印多少 XD?

c - 非阻塞 UDP 端口打开时打开文件失败

c - 覆盖读取功能,但当文件描述符为 3 或 4 时我遇到问题