Udostępnij za pośrednictwem


Operatory SHIFT: >> i <<

expression << expression
expression >> expression

Uwagi

Dostępne są następujące operatory przesunięcia bitowego:

  • Prawy shift (>>)

  • Lewy shift (<<)

Oba operandy operatory przesunięcia musi być integralną typów.Promocje integralną są wykonywane zgodnie z zasadami, które opisano w Integralną promocje.Typ wyniku jest taki sam, jak typ promowanych lewy operand.Wartość wyrażenia prawy shift x >> y jest x / 2y, a wartość wyrażenia lewy shift x << y is x * 2y.

Wynik jest niezdefiniowana, jeśli prawy operand wyrażenie shift jest ujemna lub prawy operand jest większa lub równa liczbie bitów (promowanych) lewy operand.Brak operacji shift jest wykonywana, jeśli prawy operand jest zero (0).

Operator lewy shift powoduje, że wzorzec bitowy pierwszego operandu do liczby bitów określonych przez drugi operand przesunięte w lewo.Bity naboru przez operację shift są wypełnione przez zero.Jest to Przesunięcie logiczne, zamiast operacji shift i obrót.

Operator prawy shift powoduje, że wzorzec bitowy pierwszego operandu do liczby bitów określonych przez drugi operand przesunięte w prawo.Bity naboru przez operację shift są wypełnione zero dla ilości bez znaku.Dla ilości podpisane bit znaku jest propagowana na pozycje zostały zasiedlone bit.Shift jest Przesunięcie logiczne, jeśli lewy operand jest niepodpisany ilości; w przeciwnym razie jest arytmetyczną shift.

Programu Microsoft

Wynik prawy shift podpisane ilość ujemną jest zależna od implementacji.Chociaż MicrosoftC++ propaguje najbardziej znaczący bit, aby wypełnić pozycje zostały zasiedlone bit nie ma żadnej gwarancji, że inne implementacje będzie również uczynić.

Przykład

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

Dane wyjściowe

  
  

Zobacz też

Informacje

Wyrażenia z operatory dwuargumentowe

Operatory języka C++

Priorytet i łączność operatorów

Koncepcje

Bitowe operatory Shift