Логические операции
Логические операции обычно принимают в качестве операндов выражения отношений. Операция ! принимает один операнд, остальные — два: левый и правый.
&& И
|| ИЛИ
! НЕ
Логические выражения
выражение 1 && выражение2 истинно тогда и только тогда, когда оба выражения истинны.
выражение 1 || выражение2 истинно, когда любое из выражений либо оба
сразу истинны.
! выражение истинно, когда выражение ложно, и наоборот.
Порядок оценки логических выражений
Логические выражения оцениваются слева направо. Оценка прекращается, как только становится ясно, что выражение ложно.
Примеры
6>2&&3==3 истинно.
! ( 6 > 2 & & 3 == 3 ) ложно.
х ! = 0 && 2 0/х < 5 второе выражение оценивается, только если х отлич
но от 0.
Условная операция
Операция ? : принимает три операнда, каждый из которых является выражением. Они располагаются следующим образом:
выражение1 ? выражение? : выражениеЗ
Значение полного выражения равно значению выражение2, если выражение1 истинно, и значению выражениеЗ в противном случае.

Примеры
836 Приложение Б
( 3 > 5 ) ? 1 : 2 имеет значение 2.
( а > b ) ? а : b имеет значение, большее среди а и b.
Операции, связанные с указателями
& операция взятия адреса. Когда за ней следует имя переменной, & дает ее адрес.
* операция разыменования. Когда за ней следует указатель, * дает значение, сохраненное по указанному адресу.
Примеры
Здесь Snurce — это адрес переменной nurce: nurse = 22;
ptr = &nurse; /* указатель на nurse */ val = *ptr;
Общий результат заключается в присваивании переменной val значения 22.
Операции со знаком
- знак минуса меняет знак операнда на противоположный.
+ знак плюса оставляет знак операнда без изменений.
Операции структур и объединений
Структуры и объединения используют операции для идентификации их индивидуальных членов. Операция членства применяется со структурами и объединениями, а операция косвенного членства — с указателями на структуры и объединения.
Операция членства
Операция членства (.) используется с именем структуры или объединения для указания члена этой структуры или объединения. Если name — имя структуры или объединения, a member — член, определенный шаблоном структуры, то name.member идентифицирует этот член структуры. Типом name.member является тип, указанный для member. В аналогичной манере операция членства может применяться с объединениями.
Пример
struct {
int code; float cost;
} item;
item.code = 1265;
Приведенный оператор присваивает значение элементу code структуры item.
Операция косвенного членства (или операция указателя на структуру)
Операция косвенного членства (->) используется с указателем на структуру или объединение для идентификации члена этой структуры или объединения. Предположим,
Справочные материалы 837
что ptr str — указатель на структуру, a member — член, определенный шаблоном структуры. Тогда ptrstr->member идентифицирует член структуры, на которую ссылается указатель. В аналогичной манере операция косвенного членства может применяться с объединениями.
Пример
struct {
int code; float cost;
} item, * ptrst;
ptrst = &item;
ptrst->code = 3451;
Этот фрагмент кода присваивает значение члену code структуры item. Следующие три выражения эквивалентны:
ptrst->code item.code (*ptrst).code
побитовые операции
Все описанные ниже побитовые операции за исключением ~ являются бинарными.
~ унарная операция “НЕ”, дающая в результате значение операнда, в котором каждый бит инвертирован.
& операция “И”, дающая в результате значение, в котором каждый бит установлен в 1, если соответствующие биты в обоих операндах равны 1.
I операция “ИЛИ”, дающая в результате значение, в котором каждый бит установлен в 1, когда любой из соответствующих битов операндов либо оба сразу равны 1.
Аоперация исключающего “ИЛИ”, дающая в результате значение, в котором каждый бит установлен в 1, когда любой из соответствующих битов операндов (но не оба сразу) равны 1.
<< операция сдвига влево, дающая значение, которое получено в результате сдвига битов левого операнда влево на количество позиций, указанное правым операндом. Освобождаемые места заполняются нулями.
>> операция сдвига вправо, дающая значение, которое получено в результате сдвига битов левого операнда вправо на количество позиций, указанное правым операндом. Для беззнаковых целых освобождаемые места заполняются нулями. Поведение для целых со знаком зависит от реализации.
Читать дальше