2013-01-18 2 views
5

Lassen Sie uns sagen, ich habe diese int Variable v1:Wie kopiert man Bits von einer Variablen in eine andere?

1100 1010 

Und diese Variable int v2:

1001 1110 

Ich brauche die letzten vier Bits von v2 zu den letzten vier Bits von v1, so dass die kopieren Ergebnis ist:

1100 1110 
^ ^last four bits of v2 
| 
| first four bits of v1 

Wie würde ich Ist das in C oder C++ passiert? Ich habe ein paar Artikel über bitweise Operationen gelesen, konnte aber keine spezifischen Informationen dazu finden.

Antwort

16

bitweise Operationen waren die richtigen Dinge zu suchen, .

v1 = (v1 & ~0xf) | (v2 & 0xf); 

Gibt es etwas bestimmtes, das Sie nicht von den Artikeln verstanden haben, die Sie lesen?

5

Wie wäre es

v1 = (v1 & 0xf0) | (v2 & 0xf); 

Wenn der Wert von „v1“ mehr Bits hat, würden Sie wollen eine größere Maske verwenden:

v1 = (v1 & 0xfffffff0) | (v2 & 0xf); 
2

Versuchen:

v1 = (v2 & 0x0F) | (v1 & 0xF0); 
1

Die lesbare Weise, es zu schreiben, meiner Meinung nach:

v1 &= ~0x0F;  // clear least sig. nibble of v1 
v1 |= v2 & 0x0F; // copy least sig. nibble of v2 into v1