Barninga Z
a- a+

Gli operatori: Shift su bit

Shift su bit 

Pur essendo classificato normalmente tra i linguaggi di altolivello, il C manifesta spesso la propria natura dilinguaggio orientato al sistema: gli operatori su bit di cuidispone sono una delle caratteristiche che contribuiscono arenderlo particolarmente vicino alla macchina. Tali operatoriconsentono di agire sui dati integral considerandoli semplicisequenze di bit. 

Particolarmente interessanti risultano due operatori chepermettono di traslare, cioè di "farescorrere" , di un certo numero di posizioni a destra osinistra i bit di un valore: si tratta dei cosiddettioperatori di shift. In particolare, lo shift asinistra si esprime col simbolo "<<", mentre quello a destra (indovinate un po') con">>". Esempio: 

a = 1;    printf("%d" ,a <<= 2);    printf("%d" ,a >> 1);

Il frammento di codice riportato produce la visualizzazionedei numeri 4 e 2; infatti, il numero1 in forma binaria è 00000001.Traslando a sinistra i bit di due posizioni, si ottiene00000100, che è, appunto, 4.L'operatore di assegnamento può essere compostocon gli operatori su bit: ne segue che la seconda riga dicodice modifica il valore di a, assegnandole il suostesso valore traslato a sinistra di due posizioni. Laseconda chiamata a printf() visualizza il valore2, restituito dall'espressione che trasla adestra di una posizione i bit del valore presente in a(4), ma questa volta a non èmodificata. 

Va osservato che l'operazione di shift rende privi disignificato i primi o gli ultimi bit del valore (a secondache la traslazione avvenga verso sinistra o, rispettivamente,verso destra)[5]: quegli spazi sono riempiti con bit divalore opportuno. Nel caso di shift a sinistra non viè mai problema: i bit lasciati liberi sono riempiticon bit a zero; ma nel caso di uno shift a destra le cose sicomplicano. 

Se l'integral su cui è effettuato lo shiftè senza segno, o è signed ma positivo,allora anche in questo caso sono utilizzati bit nulli comeriempitivo. Se, al contrario, l'integral è di tiposigned ed è negativo, allora va tenutopresente che il suo bit più significativo, cioèquello all'estrema sinistra, è usato proprio peresprimere il segno. Alcuni processori estendono il segno,cioè riempiono i bit lasciati liberi dallo shift conbit a uno; altri invece inseriscono comunque bit nulli.Pertanto, a seconda del calcolatore su cui è eseguita,una operazione di shift a sinistra come la seguente: 

signed char sc;    sc = -1; // In bits e' 11111111    sc >>= 4;// rimane 11111111 con E.S.; diventa 00001111 senza E.S.

può avere quale effetto un valore finale persc pari ancora a ­1, se il processoreeffettua l'estensione del segno, oppure pari a15 se non vi è estensione di segno. Cautela,dunque: consultare la documentazione della macchina[6] primadi azzardare ipotesi. 

 



Ti potrebbe interessare anche

commenta la notizia

Ci sono 1 commenti