Barninga Z
a- a+

Gli operatori: Operatori logici su bit

Operatori logici su bit 

Gli operatori logici su bit consentono di porre in relazionedue valori mediante un confronto effettuato bit per bit.Consideriamo l'operatore di prodotto logico, o and subit. Quando due bit sono posti in AND, il risultatoè un bit nullo a meno che entrambi i bit valgano1. La tabella illustra tutti i casi possibili nelprodotto logico di due bit, a seconda dei valori che cisacunodi essi può assumere. L'operazione consistente nelporre in AND due valori è spesso indicata col nome di"mascheratura" , in quanto essa ha l'effetto dinascondere in modo selettivo alcuni bit: in particolare vieneconvenzionalmente chiamato "maschera" il secondovalore. Se nella maschera è presente uno zero, nelrisultato c'è sempre uno zero in quella stessaposizione, mentre un 1 nella maschera lascia inalterato ilvalore del bit originario. Supponiamo, ad esempio, di volerconsiderare solo gli 8 bit meno significativi di un valore a16 bit: 

unsigned word;    char byte;    word = 2350;    byte = word & 0xFF;

Il valore 2350, espresso in 16 bit, risulta0000100100101110, mentre FFh è0000000011111111. L'operazione di prodottologico è rappresentabile come 

0000100100101110 &0000000011111111 =

0000000000101110

ed il risultato è 46. Dall'esempio sitrae inoltre che il simbolo dell'operatore di and su bitè il carattere "&": il contestoin cui viene utilizzato consente facilmente di distinguerlo aprima vista dall'operatore  address of, cheutilizza il medesimo simbolo pur avendo significatocompletamente diverso. 

AND 0 1
0 0 0
1 0 1

Più sottile appare la differenza dall'operatore diand logico "&&" , sebbene questoabbia grafia differente. L'and su bit agisce proprio suisingoli bit delle due espressioni, mentre l'and logicocollega i valori logici delle medesime (vero o falso). Adesempio, l'espressione 

((a > b) && c)

restituisce un valore diverso da 0 se aè maggiore di b e, contemporaneamente,c è diversa da 0. Invece,l'espressione 

((a > b) & c)

restituisce un valore diverso da 0 se aè maggiore di b e, contemporaneamente,c è dispari. Infatti un'espressione verarestituisce 1, e tutti i valori dispari hanno il bitmeno significativo ad 1, pertanto il prodotto logicoha un bit ad 1 (quello meno significativo, edè dunque diverso da 0) solo se entrambe lecondizioni sono vere. 

L'operatore di or su bit è inveceutilizzato per calcolare quella che viene comunementeindicata come somma logica di due valori. Quando due bitvengono posti in OR, il risultato è sempre 1,tranne il caso in cui entrambi i bit sono a 0. Ilcomportamento dell'operatore di somma logica èriassunto nella tabella. Si noti che il concetto di mascherapuò essere validamente applicato anche alle operazionidi OR tra due valori, in particolare quando si vogliaassegnare il valore 1 ad uno o più bit di unavariabile. Infatti la presenza di un 1 nellamaschera porta ad 1 il corrispondente bit delrisultato, mentre uno 0 nella maschera lasciainalterato il bit del valore originario (questo comportamentoè l'esatto opposto di quello dell'operatore"&"). 

OR 0 1
0 0 1
1 1 1

L'operazione di OR sui bit dei valori 2350 e255 (FFh) è rappresentabile comesegue: 

0000100100101110 |0000000011111111 =

0000100111111111

e restituisce 2599. Il simbolo dell'operatore dior su bit è "|" , e non va confusocon quello dell'operatore di or logico"||"; del resto tra i due operatoriesistono differenze di significato del tutto analoghe aquelle accennate poco fa circa gli operatori di and su bit edi and logico. 

Esiste un terzo operatore logico su bit: l'operatore dixor su bit, detto anche "or esclusivo". Ilsuo simbolo è un accento circonflesso("^"). Un'operazione di XOR tra duebit fornisce risultato 0 quando i due bit hannouguale valore (cioè sono entrambi 1 oentrambi 0), mentre restituisce 1 quando i bit hannovalori opposti (il primo 1 ed il secondo 0,o viceversa): la tabella evidenzia quanto affermato. 

XOR 0 1
0 0 1
1 1 0

Se ne trae che la presenza di un 1 in una mascherautilizzata in XOR, dunque, inverte il bit corrispondente delvalore originario. Rispolverando ancora una volta (con lasolenne promessa che sarà l'ultima) l'esempiodel valore 2350 mascherato con un 255, siha: 

0000100100101110 ^0000000011111111 =

0000100111010001

Il risultato è 2513

 



Ti potrebbe interessare anche

commenta la notizia