Operatori di spostamento bit per bit
Gli operatori shift spostano il primo operando sinistro (<<
) o destro (>>
) in base al numero di posizioni che il secondo operando specifica.
Sintassi
shift-expression
:
additive-expression
shift-expression
<<
additive-expression
shift-expression
>>
additive-expression
Entrambi gli operandi devono essere valori integrali. Questi operatori eseguono le consuete conversioni aritmetiche; il tipo del risultato è il tipo dell'operando sinistro dopo la conversione.
Per spostamenti verso sinistra, i bit a destra sgomberati vengono impostati su 0. Per spostamenti verso destra, i bit a sinistra sgomberati vengono riempiti in base al tipo del primo operando dopo la conversione. Se il tipo è unsigned
, sono impostati su 0. In caso contrario, vengono riempiti con copie del bit di segno. Per operatori left-shift senza overflow, l'istruzione
expr1 << expr2
equivale alla moltiplicazione per 2expr2. Per operatori right-shift
expr1 >> expr2
equivale alla divisione per 2expr2 se expr1
è senza segno o con un valore non negativo.
Il risultato di un'operazione di spostamento non è definito se il secondo operando è negativo o se l'operando destro è maggiore o uguale alla larghezza in bit dell'operando sinistro promosso.
Poiché le conversioni eseguite dagli operatori di turno non forniscono condizioni di overflow o di sottoflow, le informazioni possono essere perse se il risultato di un'operazione di turno non può essere rappresentato nel tipo del primo operando dopo la conversione.
unsigned int x, y, z;
x = 0x00AA;
y = 0x5500;
z = ( x << 8 ) + ( y >> 8 );
In questo esempio, x
è spostata otto posizioni a sinistra e y
è spostata otto posizioni a destra. I valori spostati vengono aggiunti, fornendo 0xAA55 e assegnati a z
.
Lo spostamento di un valore negativo a destra produce la metà del valore originale, arrotondata per difetto. Ad esempio, -253 (in binario 11111111 00000011) con scorrimento aritmetico a destra di un bit produce -127 (in binario 11111111 10000001). Un valore positivo 253 ha uno spostamento verso destra per produrre +126.
Gli scorrimenti a destra mantengono il bit di segno. Quando un intero con segno scorre a destra, il bit più significativo rimane impostato. Quando un intero senza segno scorre a destra, il bit più significativo viene cancellato.
Vedi anche
Commenti e suggerimenti
https://aka.ms/ContentUserFeedback.
Presto disponibile: Nel corso del 2024 verranno gradualmente disattivati i problemi di GitHub come meccanismo di feedback per il contenuto e ciò verrà sostituito con un nuovo sistema di feedback. Per altre informazioni, vedereInvia e visualizza il feedback per