DODATEK A PRZEWODNIK JĘZYKA C
Operatory przesunięcia « i » są lewostronnie łączne. Ich argumenty muszą być całkowite i podlegają promocji typu całkowitego. Typem wyniku jest promowany typ lewego argumentu. Wynik nie jest zdefiniowany, jeśli prawy argument jest ujemny, a także jeśli jest większy lub równy liczbie bitów w typie lewego argumentu.
wyraienie-przesunięcia:
wyraienie-addytywne
wyraienie-przesunięcia « wyraienie-addytywne wyraienie-przesunięcia » wyraienie-addytywne
Wartością E1«E2 jest E1 (traktowane jako wzorzec bitowy) przesunięte w lewo o E2 bitów; jeśli nie ma nadmiaru, jest to równoważne pomnożeniu przez 2E2. Wartością E1»E2 jest E1 przesunięte w prawo o E2 bitów. Jeżeli E1 jest bez znaku lub jest nieujemne, to przesunięcie w prawo jest równoważne z dzieleniem przez 1E2\ w pozostałych przypadkach wynik zależy od implementacji.
Operatory relacji są lewostronnie łączne, ale fakt ten nie jest specjalnie użyteczny: wyrażenie a<b<c jest gramatycznie równoważne z wyrażeniem (a<b)<c, w którym a<b ma wartość 0 lub 1.
wyraienie-relacyjne:
wyraienie-przesunięcia wyraienie-relacyjne < wyraienie-przesunięcia wyraienie-relacyjne > wyraienie-przesunięcia wyraienie-relacyjne <= wyraienie-przesunięcia wyraienie-relącyjne >= wyraienie-przesunięcia
Wszystkie operatory: < (mniejsze niż), > (większe niż), <= (mniejsze lub równe) i >= (większe lub równe) dają w wyniku 0, jeżeli wskazana relacja jest fałszywa, bądź 1 - jeżeli prawdziwa. Typem wyniku jest int. Argumenty arytmetyczne podlegają zwykłym przekształceniom arytmetycznym. Można porównywać dwa wskaźniki do obiektów tego samego typu (nie licząc kwalifikatorów) - wynik zależy od względnego położenia wskazywanych obiektów w przestrzeni adresowej. Porównywanie wskaźników jest określone tylko dla wskaźników pokazujących fragmenty tego samego obiektu: jeśli dwa wskaźniki pokazują na ten sam prosty obiekt, to są sobie równe; jeśli pokazują na składowe tej samej struktury, to wskaźnik pokazujący składową później zadeklarowaną w strukturze jest uważany za większy; jeśli pokazują
A7 WYRAŻENIA
na składowe tej samej unii, to są równe; jeśli wskazują elementy tej sam porównanie wskaźników jest równoważne z porównaniem odpowiednich indeksów tablicy. Jeśli P wskazuje ostatni element tablicy, to P+1 jest większy niż P, chociaż p+1 pokazuje poza tablicę. W pozostałych przypadkach porównywanie wskaźników nie jest zdefiniowane.
Powyższe reguły liberalizują nieco ograniczenia podane w pierwszym wydaniu książki - dopuszcza się porównywanie wskaźników wskazujących na różne składowe struktur i unii. Reguły te legalizują także porównywanie ze wskaźnikiem wskazującym tuż za koniec tablicy.
wyraienie-przyrównania: • ‘
wyraienie-relacyjne
wyraienie-przyrównania == wyraienie-relacyjne wyraienie-przyrównania ! = wyraienie-relacyjne
Operatory == (równe) i != (nie równe) są podobne do operatorów relacji z tym, że mają niższy priorytet. (Zatem a<b == c<d daje w wyniku 1, gdy obie relacje a<b oraz c<d mają tę samą wartość logiczną.)
Do operatorów przyrównania odnoszą się te same reguły, co do operatorów relacji, a ponadto wskaźnik można przyrównać do stałej całkowitej o wartości 0 albo do wskaźnika do typu void. Patrz p. A6.6.
wyraienie-AND:
wyraienie-przyrównania wyraienie-AND & wyraienie-przyrównania
Wynikiem tej operacji jest bitowa koniunkcja argumentów; argumenty podlegają zwykłym przekształceniom arytmetycznym. Operator odnosi się tylko do argumentów całkowitych.
wyraienie-XOR:
wyraienie-AND
wyraienie-XOR wyraienie-AND
•8 — język ANSI C 273