DODATEK A PRZEWODNIK JĘZYKA C_____
Wynikiem tej operacji jest bitowa różnica symetryczna argumentów; argumenty podlegają zwykłym przekształceniom arytmetycznym. Operator odnosi się tylko do argumentów całkowitych.
wyraienie-OR:
wyraienie-XOR
wyraienie-OR \ wyraienie-XOR
Wynikiem tej operacji jest bitowa alternatywa argumentów; argumenty podlegają zwykłym przekształceniom arytmetycznym. Operator odnosi się tylko do argumentów całkowitych.
logiczne-wyraienie-AND:
wyraienie-OR
logiczne-wyraienie-AND && wyraienie-OR
Operator && jest lewostronnie łączny. Wynik jest równy 1, jeżeli oba argumenty są różne od zera; w pozostałych przypadkach jest równy 0. W odróżnieniu od operatora & operator && gwarantuje obliczanie argumentów od lewej strony do prawej: najpierw oblicza się lewy argument, włączając w to wszystkie efekty uboczne, i jeśli jego wartość jest równa zero, to wartością wyrażenia jest 0. W przeciwnym przypadku oblicza się drugi argument i jeśli jego wartość jest równa zero, to wartością wyrażenia jest 0; w przeciwnym przypadku wartością jest 1.
Argumenty nie muszą być tego samego typu, ale muszą mieć typy arytmetyczne lub być wskaźnikami. Wynik jest typu int.
logiczne-wyraienie-OR:
logiczne-wyraienie-AND
logiczne-wyraienie-OR || logiczne-wyraienie-AND
Operator 11 jest lewostronnie łączny. Wynik jest równy l, jeżeli którykolwiek z argumentów jest różny od zera; w przeciwnym przypadku jest równy 0. W odróżnieniu od operatora | operator || gwarantuje obliczanie argumentów od lewej strony do prawej: najpierw oblicza się lewy argument, włączając w to wszystkie efekty uboczne, i jeśli jego wartość jest różna od zera, to wartością wyrażenia jest 1. W przeciwnym przy-
A7 WYRAŻENIA
padku oblicza się drugi argument i jeśli jego wartość jest wyrażenia jest 1; w przeciwnym przypadku wartością jest 0.
Argumenty nie muszą być tego samego typu, ale muszą mieć typy arytmetyczne lub być wskaźnikami. Wynik jest typu int.
wyraienie-warunkowe:
logiczne-wyraienie-OR
logiczne-wyraienie-OR ? wyraienie : wyraienie-warunkowe
Najpierw oblicza się pierwsze wyrażenie, włączając w to wszystkie efekty uboczne. Jeśli wartość tego wyrażenia jest różna od zera, to wynikiem jest wartość drugiego wyrażenia, a w przeciwnym przypadku trzeciego. Spośród wyrażeń drugiego i trzeciego oblicza się tylko jedno. Jeśli wyrażenia drugie i trzecie mają typy arytmetyczne, to podlegają zwykłym przekształceniom arytmetycznym do wspólnego typu i taki jest typ wyniku. Jeśli oba są typu void albo są strukturami lub uniami tego samego typu, albo są wskaźnikami do tego samego typu, to typem wyniku jest wspólny typ tych wyrażeń. Jeśli jedno jest wskaźnikiem, a drugie stałą 0, to 0 jest przekształcane do typu wskaźnika i taki jest typ wyniku. Jeśli jedno jest wskaźnikiem do void, a drugie innym wskaźnikiem, to ten inny wskaźnik jest przekształcany na wskaźnik do void i taki jest typ wyniku.
Przy rozpatrywaniu typów wskaźników kwalifikatory typu (p. A8.2) obiektów wskazywanych przez te wskaźniki nie odgrywają roli, ale typ wyniku dziedziczy kwalifikatory z obu części wyrażenia warunkowego.
Istnieje kilka operatorów przypisania. Wszystkie są prawostronnie łączne.
wyraienie-przypisania:
wyraienie-warunkowe
wyraienie-jednoargumentowe operator-przypisania wyraienie-przypisania
operator-przypisania: (jeden z)
= *= /= %= += -= «= »= &= ~= | =
Dla wszystkich operatorów przypisania lewy argument musi być l-wartością i ta l-wartość musi być modyfikowalna: nie może być tablicą, nie może mieć niekomplet-nego typu i nie może być funkcją. Jej typ nie może być też kwalifikowany słowem kluczowym const; jeśli 1-wartość jest strukturą lub unią, to żadna z jej składowych i,
275