INTRODUZIONE ALLA PROGRAMMAZIONE IN C



Operatori di bitwise



Gli operatori di bitwise (che operano sui singoli bit) sono i seguenti: "&" AND "|" OR "^" XOR "~" Complemento a 1 (0=>1, 1=>0) "<<" shift a sinistra ">>" shift a destra Nota: fare attenzione, come gia' detto in precedenza, a non confondere & con && (& e' "bitwise and", mentre && e' "logical and"); la stessa cosa vale per | e ||. "~" e' un operatore unario, cioe' opera su un solo argomento indicato a destra dell'operatore. Gli operatori di shift eseguono un appropriato shift dall'operatore indicato a destra a quello indicato a sinistra. L'operatore destro deve essere positivo. I bits liberati vengono riempiti con zero (cioe' non si tratta di una rotazione, con recupero sul lato opposto dei bit shiftati). Ad esempio: z<<2 shifta i bit in z di due posti verso sinistra cosi', se z=00000010 (binario) o 2 (decimale) allora, z>>=2 => z=00000000 (binario) o 0 (decimale) inoltre, z<<=2 => z=00001000 (binario) o 8 (decimale) Quindi, uno shift a sinistra e' equivalente ad una moltiplicazione per 2; similmente, uno shift a destra equivale ad una divisione per 2. Nota: l'operazione di shift e' molto piu' veloce della reale moltiplicazione (*) o divisione (/); cosi', se occorrono veloci moltiplicazioni o divisioni per 2 si puo' utilizzare lo shift. Per illustrare le molteplici caratteristiche degli operatori di bitwise, riportiamo una funzione (bitcount) che somma 2 bit settati ad 1 un un numero ad 8 bit (unsigned char) passato come argomento alla funzione: int bitcount(unsigned char x) {int count; for (count=0; x!=0; x>>=1); if (x&01) count++; return count; } Questa funzione mostra molti punti del programma C: