Operatori di spostamento: >> e <<
expression << expression
expression >> expression
Note
Gli operatori di spostamento bit a bit sono i seguenti:
Spostamento a destra (>>)
Spostamento a sinistra (<<)
Entrambi gli operandi di operatori di spostamento devono essere dei tipi integrali.Promozioni integrali vengono eseguite in base alle regole descritte Promozioni integrali.Il tipo del risultato è lo stesso tipo dell'operando di sinistra innalzata di livello.Il valore di un'espressione di spostamento a destra x >> y è x / 2ye il valore di un'espressione di spostamento a sinistra x << y is x * 2y.
Il risultato è definito se l'operando di destra di un'espressione di shift è negativo o se l'operando di destra è maggiore o uguale al numero di bit l'operando di sinistra (promozione).Se l'operando di destra è zero (0), non viene eseguita alcuna operazione di spostamento.
L'operatore di spostamento a sinistra non determina lo schema di bit del primo operando da spostare a sinistra del numero di bit specificati dal secondo operando.Bit liberate dall'operazione di spostamento vengono riempiti di zeri.Si tratta di uno spostamento logico invece di un'operazione di shift e ruotare.
L'operatore di spostamento a destra non determina lo schema di bit del primo operando da spostare a destra del numero di bit specificati dal secondo operando.Bit liberate dall'operazione di spostamento vengono riempiti di zeri per quantitativi non firmati.Per i quantitativi firmati, il bit del segno viene propagato nelle posizioni di bit liberate.MAIUSC + è uno spostamento logico, se l'operando di sinistra è una quantità senza segno; in caso contrario, è uno spostamento aritmetico.
Specifici di Microsoft
Il risultato di uno spostamento a destra di una quantità negativa firmato è dipendente dall'implementazione.Anche se MicrosoftC++ propaga il bit più significativo per riempire le posizioni di bit liberate, non fornisce alcuna garanzia che altre implementazioni anche tale scopo.
Esempio
// expre_Shift_Operators.cpp
// compile with: /EHsc
// Demonstrate shift operators
#include <iostream>
using namespace std;
int main() {
cout << "5 times 2 is " << (5 << 1) << endl
<< "20 divided by 4 is " << (20 >> 2) << endl;
}
Output
Vedere anche
Riferimenti
Espressioni con gli operatori binari
Precedenza e associatività di operatore