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
Precedência e associatividade de operadores