【发布时间】:2016-04-30 23:08:15
【问题描述】:
K&R 的练习 2-6:
编写一个函数
setbits(x,p,n,y),它返回x,其中n位从p开始设置为y最右边的n位,其他位保持不变。
这是我对示例输入/输出的解释:
unsigned x = 315;
int p = 2;
int n = 3;
unsigned y = 9;
printf("%d\n", setbits(x, p, n, y)); // 295
这是我的推理。
位置 2 的 3 位 315:
0000 0001 0011 1011
- --
9 的最右边 3 位:
0000 0000 0000 1001
---
将 9 的最右边 3 位设置为 315 => 295 从 2 开始的 3 位:
0000 0001 0010 0111
- --
我写了一些代码,然后想对照其他解决方案检查它,for example。我在网上找到的两个都给出了不同的答案,313:
0000 0001 0011 1001
--- ???
我错过了什么?
【问题讨论】:
-
索引在 C 中从零开始。推测“位置 2”是第三位。
-
没有minimal reproducible example,就无法诊断您的代码。
-
好的,我想知道这一点并尝试了两种方式。我已经编辑了我的问题以反映正确的定位,但这对我来说仍然没有意义。
-
@Olaf,我实际上只是在询问输入/输出。我对 expected 答案应该是什么的推理是错误的呢?
标签: c bit-manipulation