test di verificaDomanda
Qual è il valore finale della variabile C?
immagine del test



1 / 12 domande



Vuoi visualizzarlo sul tuo sito?

Gli operatori sui bit nel linguaggio C

Nel linguaggio C sono inclusi molti operatori dedicati alle operazioni sui bit. Gli operatori Bitwise consentono di svolgere delle elaborazioni e dei confronti direttamente sui singoli bit.

In una memoria informatica i dati sono registrati tramite i numeri binari. Ogni carattere alfanumerico e ogni numero hanno un codice binario ( byte ) espresso sotto forma di zero e uno (bit).

Quali sono gli operatori sui bit nel linguaggio C?

I principali operatori sui bit sono:

Somma di bit o OR logico ( | )

L'operatore OR logico ( | ) consente di sommare i singoli bit tra due numeri binari.

a|b

Esempio di OR logico sui bit

Il numero 11 equivale al numero binario 1011 mentre il numero 12 a 1100. Assegniamo alle due variabili i valori A=11 e B=12.

a=11;
b=12;
c=a|b;

La somma logica C di 12 e 11 non restituisce 23, come si potrebbe pensare, bensì 15. L'operatore OR ( disgiunzione inclusiva ) verifica i bit nella rappresentazione binaria dei due operandi A e B in ogni posizione.

esempio di OR logico: la somma logica 11 OR 12 è uguale a 15

Nel risultato finale viene scritto uno (1) quando nella stessa posizione è presente il numero uno (1) in almeno uno degli operandi. In caso contrario, viene scritto zero.

Il numero 15 in binario è rappresentato con la sequenza 1111 ed è, quindi, il risultato dell'operazione A|B.

L'operatore OR binario di assegnazione

Per assegnare il risultato dell'OR logico direttamente a delle due variabili degli operandi è possibile utilizzare l'operatore di assegnazione |=.

a=11;
b=12;
a|=b;

Nell'esempio precedente, il programma esegue l'operazione A|B ( 12|11 ) e assegna il risultato ( 15 ) alla variabile A.

Prodotto di bit o AND logico ( & )

L'operatore AND logico ( & ) moltiplica i singoli bit di due numeri binari.

a&b

Esempio di AND logico sui bit

Assegniamo A=11 e B=12. Nella rappresentazione binaria il numero 11 è 1011 mentre il numero 12 è 1100.

a=11;
b=12;
c=a&b;

La moltiplicazione logica C di 12 e 11 è uguale a 8. L'operatore AND ( congiunzione logica ) controlla i singoli bit dei due numeri A e B nella rappresentazione binaria per ogni posizione.

esempio di AND logico: la moltiplicazione logica 11 OR 12 è uguale a 8

Nel risultato finale viene scritto uno (1) quando nella stessa posizione è presente il numero uno (1) in entrambi gli operandi A e B. In caso contrario, viene scritto zero (0).

Il numero 8 nel sistema binario è rappresentato dalla sequenza 1000 ed è, quindi, il risultato dell'operazione A&B.

Disgiunzione esclusiva sui bit o XOR logico ( ^ )

Nel linguaggio C l'operatore XOR è rappresentato dal simbolo ^. L'operatore XOR è uguale a uno (1) quando soltanto uno dei due operandi è uguale a uno (1). In caso contrario, è uguale a zero (0).

a^b

Esempio di Xor logico sui bit

Nel seguente codice sono stati assegnati alle variabili due valori, A=11 e B=12. I numeri 11 e 12 nel sistema binario sono rappresentati rispettivamente dalle sequenze 1011 e 1100.

a=11;
b=12;
c=a^b;

Nel linguaggio C lo XOR logico verifica i bit dei due numeri binari per ogni singola posizione. Quando in una colonna soltanto uno degli operatori è uno (1), lo XOR scrive uno (1) nel risultato in quella posizione. Viceversa, in tutti gli altri casi scrive zero.

esempio di XOR logico, sommando i bit per ciascuna posizione si scrive uno quando soltanto uno degli operandi è uguale a uno. Viceversa si scrive zero.

Il risultato C dell'operatore XOR è pari a 7. Il numero sette in linguaggio binario è rappresentato con la sequenza 111. Da notare, a differenza dell'operatore OR, nello XOR quando entrambi gli operandi sono uguali a uno, il risultato è zero.

L'operatore XOR con assegnazione

Per assegnare il risultato dell'operazione XOR a una delle variabili degli operandi, è sufficiente aggiungere il simbolo uguale (=) dell'assegnazione dopo l'operatore XOR (^).

a^=b;

L'operatore ^= indica al programma di assegnare il risultato dello XOR logico A^B alla variabile A.

La negazione dei bit ( ~ )

L'operatore di negazione dei bit nel linguaggio C è rappresentato dal carattere tilde ( ~ ). Si tratta di un operatore unario poiché utilizza soltanto un operando. La negazione di bit restituisce la negazione dei bit di un numero binario.

c=~a

Esempio di negazione dei bit

Alla variabile A assegniamo il valore 11. Nella rappresentazione binaria il numero unici è 1011.

a=11;
c=~a;

L'operatore di negazione dei bit verifica ogni cifra binaria del numero 1011, da sinistra verso destra, sostituendo lo zero con uno e l'uno con lo zero. In questo modo si ottiene il complemento binario del numero.

esempio di negazione dei bit nel linguaggio C

Il risultato è il numero binario negativo 10100 equivalente al numero decimale -12. Essendo un numero binario negativo 10100 è rappresentato in complemento a 2, quindi equivale al numero positivo +20 bensì il numero negativo -12.

Scorrimento dei bit a sinistra ( << ) e destra ( >> )

Nel linguaggio C l'operatore dello scorrimento dei bit consente di spostare tutti i bit verso sinistra ( << ) o verso destra ( >> ). L'operatore segue il nome della variabile (A) ed è seguito dal numero di posizioni N da spostare ( shift ).

Lo scorrimento dei bit verso sinistra per N posizioni è il seguente:

a<<n

Analogamente, lo spostamento dei bit verso destra per N posizioni è il seguente:

a>>n

Esempio di scorrimento verso sinistra

Nel seguente codice sorgente viene assegnato il valore 11 alla variabile A. Il numero undici in binario è rappresentato dalla sequenza 1011.

a=11;
c=a<<1;

L'operatore di scorrimento << sposta verso sinistra i bit, aggiungendo uno zero a destra.

esempio di spostamento di bit verso sinistra

Il risultato finale C è il numero binario 10110 che equivale al numero decimale +22.

Se avessimo spostato i bit di due posizioni ( A<<2 ) avremmo ottenuto il numero 101100, equivalente al numero decimale 44, e così via.

Esempio di scorrimento verso destra

Riprendiamo lo stesso esempio precedente modificando il verso dello scorrimento verso destra (>>). Il numero 11 è rappresentato in binario con la sequenza 1011.

a=11;
c=a>>1;

L'operatore di scorrimento << sposta verso destra i bit, aggiungendo uno zero a destra, eliminando la posizione binaria meno significativa.

un esempio di spostamento dei bit verso destra nel linguaggio C

Il risultato finale è il numero binario 101 che equivale al numero decimale +5.

L'operatore di scorrimento dei bit di assegnazione

E' possibile applicare lo scorrimento su una variabile assegnandogli direttamente il nuovo valore.

L'operatore di scorrimento dei bit verso sinistra con assegnazione è <<=.

a<<=1;

Quello di scorrimento dei bit verso destra con assegnazione è >>=.

a>>=1;

In questi casi, il programma esegue lo scorrimento dei bit, verso destra (>>) o sinistra (<<), e subito dopo assegna (=) il risultato alla medesima variabile A.

https://www.okpedia.it/gli-operatori-sui-bit-nel-linguaggio-c


Segnala un errore o invia un suggerimento per migliorare la pagina


Gli operatori del linguaggio C


FacebookTwitterLinkedinLinkedin