View Single Post
Old 11-11-2013, 14:20   #3
-Ivan-
Senior Member
 
L'Avatar di -Ivan-
 
Iscritto dal: Mar 2003
Città: Rimini
Messaggi: 1843
Ho scritto questa porzione di codice:

Codice:
//0x (padding) (red) (green) (blue)
unsigned int colorRGB = 0x00010203;

colorRGB <<= 8;

_Uint32t red = colorRGB >> 24;
_Uint32t green = (colorRGB >> 16) & 0xff;
_Uint32t blue = (colorRGB >> 8) & 0x0ff;

cout << "Red: " << red << endl << endl;
cout << "Green: " << green << endl << endl;
cout << "Blue: " << blue << endl << endl;
funziona, posso così ottenere i valori di r, g, b estraendoli dall'unsigned int.
Però questo codice l'ho trovato su internet e non capisco esattamente l'and a cosa serva.
Mi dovrebbe annullare il valore dei bit inutili ma l'and non mi pare possa fare questo (eppure funziona quindi non ho capito qualcosa).

Se io ho un int iniziale di 32 bit e voglio prendere i bit da 8 a 16 eseguo uno switch a destra di 16 in modo da ritrovarmi i miei 8 bit a destra e poi i bit da 0 a 8 subito a sinistra. Questi bit da 0 a 8 poi li voglio annullare perchè non fanno parte dei bit che mi interessano e qui mi pare che si esegua l'and ma l'and con 0xff (cioè otto 1) da quello che so lascerebbe a 1 i bit già ad 1 ed a 0 i bit già a 0, dunque non cambierebbe niente.
-Ivan- è offline   Rispondi citando il messaggio o parte di esso