K& R的练习2-6:不理解输入/输出

时间:2016-04-30 14:55:58

标签: c bit-manipulation

K& R的练习2-6:

  

写一个函数setbits(x,p,n,y),返回x,其中n位从位置p开始,设置为ny位},保持其他位不变。

以下是我对输入/输出示例的解释:

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
                --- ???

我错过了什么?

1 个答案:

答案 0 :(得分:1)

问题的说明有点含糊不清。你在口译 “从位置p开始的n位”表示位p,p + 1,...,p + n-1。 您链接到的页面似乎表示从位置p开始的n位 是比特p,p-1,...,p-n + 1。 因此从第2位开始的3位将是位2,1,0,最右边的3位。