gpt4 book ai didi

c - k&r 与位操作混淆

转载 作者:太空狗 更新时间:2023-10-29 14:59:59 25 4
gpt4 key购买 nike

练习是:编写一个函数 setbits(x,p,n,y) 返回 x,其中从位置 p 开始的 n 位设置为 y 的最右边 n 位,其他位保持不变。

我的解决方案尝试是:

#include <stdio.h>

unsigned setbits(unsigned, int, int, unsigned);

int main(void)
{
printf("%u\n", setbits(256, 4, 2, 255));
return 0;
}

unsigned setbits(unsigned x, int p, int n, unsigned y)
{
return (x >> (p + 1 - n)) | (1 << (n & y));
}

这可能不正确,但我走的路对吗?如果不是,我做错了什么?我不确定为什么我不能完全理解这一点,但我花了大约一个小时试图想出这个。

谢谢。

最佳答案

这是你的算法:

  1. 如果n为0,返回x。
  2. 取 1,左移 n 次,然后减去 1。调用此掩码
  3. 左移掩码 p 次调用此 mask2
  4. And x 与 mask2 的倒数。 y 带掩码,左移 p 次。
  5. 这两个操作的结果,并返回那个值。

关于c - k&r 与位操作混淆,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2076084/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com