2016-04-30 8 views
0

K & R Übung verstehen 2-6:K & R Übung 2-6: Verwenden Sie keine Eingabe/Ausgabe

Schreiben Sie eine Funktion setbits(x,p,n,y) die x mit den n Bits zurückgibt, die auf der äußersten rechten n an Position p Satz beginnen Bits von y, die anderen Bits unverändert lassen.

Hier ist meine Interpretation eines Beispiels Eingabe/Ausgabe:

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

Und hier ist meine Argumentation.

3 Bits an der Position 2 für 315:

0000 0001 0011 1011 
      - --  

3 am weitesten rechts stehenden Bits, die für 9:

0000 0000 0000 1001 
       --- 

Set 3 am weitesten rechts stehenden Bits, die für 9 bis die 3 Bits in 2 für 315 => 295 Ausgang :

0000 0001 0010 0111 
      - -- 

ich einige Code geschrieben und wollte es dann gegen andere Lösungen prüfen, for example. Die zwei, die ich online fand, geben beide eine andere Antwort, 313:

0000 0001 0011 1001 
       --- ??? 

Was vermisse ich?

+1

Die Indexierung beginnt in C bei Null. Vermutlich ist "Position 2" das dritte Bit. – EOF

+0

Ohne [mcve] ist es nicht möglich, Ihren Code zu diagnostizieren. – Olaf

+0

Okay, ich habe mich gefragt und beide Wege versucht. Ich habe meine Frage bearbeitet, um die korrekte Positionierung wiederzugeben, aber für mich ergibt das immer noch keinen Sinn. – gwg

Antwort

1

Die Spezifikation des Problems ist ein bisschen mehrdeutig. Sie interpretieren "die n Bits, die an der Position p beginnen", um die Bits p, p + 1, ..., p + n-1 zu bezeichnen. Die von Ihnen verlinkte Seite scheint zu sagen, dass die n Bits ab Position p Bits p, p-1, ..., p-n + 1 sind. Also die 3 Bits, die bei Bit 2 beginnen, wären die Bits 2, 1, 0, die drei rechten Bits.