Share via


SHIFT operadores: >> e <<

expression << expression
expression >> expression

Comentários

Operadores de desvio são:

  • Deslocamento à direita (>>)

  • Shift esquerda (<<)

Ambos os operandos dos operadores shift devem ser de tipos integrais.Promoções integrais são realizadas de acordo com as regras descritas na Promoções integrais.O tipo do resultado é o mesmo tipo de operando esquerdo promovido.O valor de uma expressão de shift direita x >> y é x / 2ye o valor de uma expressão de shift esquerda x << y is x * 2y.

O resultado é indefinido se o operando da direita de uma expressão de shift for negativo ou se o operando da direita é maior que ou igual ao número de bits no operando esquerdo (promovido).Nenhuma operação de shift é executada se o operando direito for zero (0).

O operador shift esquerda faz com que o padrão de bits do primeiro operando para ser deslocada para a esquerda pelo número de bits especificado pelo segundo operando.Bits tornadas vagas pela operação de shift são preenchidas com zero.Esta é uma mudança de lógica em vez de uma operação de shift e gire.

Operador right shift faz com que o padrão de bits do primeiro operando para ser deslocada para a direita pelo número de bits especificado pelo segundo operando.Bits tornadas vagas pela operação de shift são preenchidas com zero para quantidades não assinadas.Para quantidades assinadas, o bit de sinal é propagado para as posições de bit tornadas vagas.A mudança é uma mudança de lógica se o operando esquerdo é uma quantidade não assinada; Caso contrário, é um shift aritmético.

Específicos do Microsoft

O resultado de um deslocamento à direita de uma quantidade negativa assinado é dependente de implementação.Embora MicrosoftC++ propaga o bit mais significativo para preencher as posições de bit tornadas vagas, não há nenhuma garantia que outras implementações também fará isso.

Exemplo

// 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;
}

Saída

  
  

Consulte também

Referência

Expressões com operadores binários

Operadores do C++

Precedência e associatividade de operadores

Conceitos

Operadores de Bit Shift