2013-01-18 11 views
5

Diciamo che ho questo int variabile v1:Come copiare i bit da una variabile a un'altra?

1100 1010 

E questa variabile int v2:

1001 1110 

ho bisogno di copiare gli ultimi quattro bit da v2 agli ultimi quattro bit di v1 in modo che la il risultato è:

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

Come vorrei ottenuto di fare questo in C o C++? Ho letto alcuni articoli sulle operazioni bit a bit, ma non sono riuscito a trovare alcuna informazione specifica su questo.

risposta

16

operazioni bit per bit sono le cose giuste da cercare .

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

C'è qualcosa che non hai capito dagli articoli che hai letto?

5

Come su

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

Se il valore di "v1" ha più bit, che ci si vuole utilizzare una maschera più grande:

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

Prova:

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

Il modo più leggibile di scriverlo, a mio parere:

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