K& R的练习2-6:
写一个函数
setbits(x,p,n,y)
,返回x
,其中n
位从位置p
开始,设置为n
位y
位},保持其他位不变。
以下是我对输入/输出示例的解释:
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位最右边的位:
0000 0000 0000 1001
---
将3的最右边的位设置为3,从3开始将3位设置为315 => 295:
0000 0001 0010 0111
- --
我写了一些代码,然后想要针对其他解决方案for example进行检查。我在网上发现的两个都给出了不同的答案,313:
0000 0001 0011 1001
--- ???
我错过了什么?
答案 0 :(得分:1)
问题的说明有点含糊不清。你在口译 “从位置p开始的n位”表示位p,p + 1,...,p + n-1。 您链接到的页面似乎表示从位置p开始的n位 是比特p,p-1,...,p-n + 1。 因此从第2位开始的3位将是位2,1,0,最右边的3位。