2016-04-30 13 views
0

K & Rのエクササイズ2-6:K&Rのエクササイズ2-6:理解していない入力/出力

位置に右端のnからpセットを開始nビットでxを返す関数setbits(x,p,n,y)を書きますビットはyとなり、他のビットは変更されません。ここで

たとえば入力/出力の私の解釈です:

unsigned x = 315; 
int p = 2; 
int n = 3; 
unsigned y = 9; 
printf("%d\n", setbits(x, p, n, y)); // 295 

そして、ここでは私の推論です。

0000 0001 0011 1011 
      - --  

9 3右端ビット:315 => 295のために2から始まる3ビット9 3右端ビット

0000 0000 0000 1001 
       --- 

セット315のための2位の

3ビット:

0000 0001 0010 0111 
      - -- 

私はいくつかのコードを書いた後、他のソリューション、for exampleに対してそれをチェックしたいです。私がオンラインで見つけた2つの答えは、313:

0000 0001 0011 1001 
       --- ??? 

私は何が欠けていますか?

+1

索引付けはCでゼロから開始します。おそらく、「位置2」は3番目のビットです。 – EOF

+0

[mcve]がなければ、コードを診断することはできません。 – Olaf

+0

さて、私はそれについて疑問に思っていたし、両方の方法を試みた。私は正しい位置を反映するために私の質問を編集しましたが、それでも私には意味がありません。 – gwg

答えて

1

問題の仕様は少し曖昧です。 を、ビットp、p + 1、...、p + n-1を意味する "位置pで始まるnビット"と解釈しています。 あなたがリンクしたページは、位置p から始まるnビットは、ビットp、p-1、...、p-n + 1であると考えられます。 したがって、ビット2から始まる3ビットは、ビット2,1,0、最も右の3ビットになります。

関連する問題