Bitowe operatory Shift
Operatory przesunięcia shift ich pierwszy operand po lewej (<<) lub w prawo (>>) przez liczbę pozycji określa drugi operand.
Składnia
SHIFT wyrażenie:
wyrażenie dodatkuSHIFT wyrażenie<<dodatku shift wyrażenie>>wyrażenie dodatku
Oba operandy musi być integralną wartości.Tych operatorów wykonywania zwykłych konwersje arytmetycznych; Typ wyniku jest typem lewego operandu po konwersji.
Dla leftward przesunięcia zostały zasiedlone prawo bity są ustawione na 0.Dla rightward przesunięcia zostały zasiedlone lewej bity są wypełnione na podstawie typu pierwszego operandu po konwersji.Jeśli typem jest unsigned, są ustawione na 0.W przeciwnym razie są wypełnione kopie bitem znaku.Dla podmiotów gospodarczych lewy shift bez przepełnienia, instrukcja
expr1 << expr2
mnożenie przez 2 odpowiadaWyr2.Dla operatorów prawy shift
expr1 >> expr2
dzielenie przez 2 odpowiadaWyr2 Jeśli expr1 jest niepodpisany lub ma wartość nieujemna.
Wynik operacji shift jest niezdefiniowana, drugi operand jest liczbą ujemną lub prawy operand jest większa niż lub równa szerokości bitów promowanych lewy operand.
Ponieważ zestawami przez shift operatorów nie przewidują przepełnienie lub niedomiar warunków, informacje mogą zostać utracone, jeśli wynik operacji shift nie może być przedstawiona w rodzaju pierwszego operandu po konwersji.
unsigned int x, y, z;
x = 0x00AA;
y = 0x5500;
z = ( x << 8 ) + ( y >> 8 );
W tym przykładzie x jest przesunięty w lewo ośmiu pozycji i y jest przesuniętych prawo ośmiu pozycji.Przesuniętych wartości zostaną dodane, dając 0xAA55 i przypisany do z.
Przesuwanie wartość ujemna po prawej stronie plony pół oryginalne wartości, zaokrąglona w dół.Na przykład –253 (00000011 – 11111111 binarny) przesunięte –127 daje prawo jeden bit (10000001 – 11111111 binarny).Pozytywny 253 zmian roboczych prawo do produkcji +126.
Prawo zmiany zachowania bitem znaku.Gdy liczba całkowita ze znakiem przesuwa się po prawej, najbardziej znaczący bit pozostaje zestawu.Gdy liczba całkowita bez znaku przesuwa się po prawej, najbardziej znaczący bit jest wyczyszczone.