Mi permetto di aggiungere qualche dettaglio a quanto hai giustamente detto: lo shift verso sinistra è spesso utilizzato, specie dai compilatori, invece di utilizzare la moltiplicazione per 2. esempio: 2 (10b) > 1(1b) = 1 (1b) Un altro esempio delle operazioni sui bit è quando si manipolano i colori. Capita infatti di rappresentare 1 pixel come valore a 24bit, composto dai 3 canali RGB (rosso, verde, blu); a volte invece valori a 32bit, dove è presente anche alpha (la trasparenza). Un esempio pratico? Se si ha 1px a 32bit con questo valore in binario (ARGB): 00000000'11111111'00000000'11111111b (l'apice singolo è solo per separare i gruppi di 8bit, così si legge meglio), e si vuole ricavare la componente rossa... come si fa? Si shifta di 16bit a destra, e si applica una "maschera" (usando l'and bit a bit) con valore 255 (in binario sono 8 bit a 1). In numeri : 00000000'11111111'00000000'11111111b >> 16 = 00000000'00000000'00000000'11111111b Applicando l'AND, con il valore 255: 00000000'00000000'00000000'11111111b & 00000000'00000000'00000000'11111111b -------------------------------------------------------------------- 00000000'00000000'00000000'11111111b Avrei altri esempi, ma evito. Mi sono dilungato un pò, spero sia comunque chiaro. :)
Non so come mai ma sai spiegare in modo perfetto e fai capire tutto. Altro like!!!!
Mi permetto di aggiungere qualche dettaglio a quanto hai giustamente detto:
lo shift verso sinistra è spesso utilizzato, specie dai compilatori, invece di utilizzare la moltiplicazione per 2.
esempio: 2 (10b) > 1(1b) = 1 (1b)
Un altro esempio delle operazioni sui bit è quando si manipolano i colori. Capita infatti di rappresentare 1 pixel come valore a 24bit, composto dai 3 canali RGB (rosso, verde, blu); a volte invece valori a 32bit, dove è presente anche alpha (la trasparenza).
Un esempio pratico?
Se si ha 1px a 32bit con questo valore in binario (ARGB): 00000000'11111111'00000000'11111111b (l'apice singolo è solo per separare i gruppi di 8bit, così si legge meglio), e si vuole ricavare la componente rossa... come si fa?
Si shifta di 16bit a destra, e si applica una "maschera" (usando l'and bit a bit) con valore 255 (in binario sono 8 bit a 1).
In numeri :
00000000'11111111'00000000'11111111b >> 16 = 00000000'00000000'00000000'11111111b
Applicando l'AND, con il valore 255:
00000000'00000000'00000000'11111111b
&
00000000'00000000'00000000'11111111b
--------------------------------------------------------------------
00000000'00000000'00000000'11111111b
Avrei altri esempi, ma evito.
Mi sono dilungato un pò, spero sia comunque chiaro. :)
Per chi cerca il video di SISTEMI DI NUMERAZIONE: Decimale, Binario, Ottale, Esadecimale --> ua-cam.com/video/1VIpdUumwbw/v-deo.html