Condividi tramite


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

Operatori di C++

Precedenza e associatività di operatore

Concetti

Operatori di spostamento bit per bit