|
Лекции Булатицкий Дмитрий Иванович (во многом по материалам Прасолова А. Н.)
Логические операции Логические операции служат для построения сложных условий, подобных приведенному в предыдущем параграфе. В языке Си определены следующие логические операции:
! логическое отрицание (одноместная),
&& логическое "и" (двуместная),
|| логическое "или" (двуместная).
В отличие от битовых операций, логические операции выполняются не над битами, а над значениями операндов. Результаты логических операций определяются следующей таблицей:
Результаты логических операций op1
| op2
| !op1
| op1 && op2
| op1 || op2
| 0
| 0
| не 0 (1)
| 0
| 0
| 0
| не 0 (1)
| не 0 (1)
| 0
| не 0 (1)
| не 0 (1)
| 0
| 0
| 0
| не 0 (1)
| не 0 (1)
| не 0 (1)
| 0
| не 0 (1)
| не 0 (1)
| Логические операции выполняются слева направо, причем для двуместных операций второй операнд может не вычисляться, если значение первого операнда однозначно определяет значение операции. Это происходит в том случае, если первый операнд для && равен 0 (результат операции тоже 0) и если первый операнд для || не 0 (результат операции тоже не 0).
Дополнительные операции присваивания Очень часто в программах присутствуют операторы вида a = a + b;
a = a - b;
a = a * b;
a = a / b; Они изменяют значения некоторых переменных. В языке Cи для сокращения программ и повышения их эффективности используются дополнительные операторы присваивания: a += b;
a -= b;
a *= b;
a /= b;
a %= b; Дополнительные операции присваивания должны быть записаны слитно, без пробелов. Действие операции - изменение значения переменной, стоящей слева от знака операции. Результат - значение измененной переменной.
Дополнительные операции присваивания имеют самый низкий приоритет и выполняются справа налево.
Использование операций ++, --, +=, , , /=, %= вместо обычных не является обязательным, но их применение считается хорошим стилем программирования на языке Cи.
Операция определения размера данных В некоторых случаях совершенно необходимо иметь возможность определять размеры данных, создаваемых пользователем. Это позволяет писать программы, независимые от компьютера, на котором они выполняются, а также упростить процедуру внесения корректировок в программы. Для определения размера данных в языке Си используется операция sizeof. Первая форма операции выглядит следующим образом: БНФ:
"sizeof(" тип ")" Результат этой формы операции - размер данного соответствующего типа в байтах, например, sizeof(float) даст в результате 4.
Вторая форма операции выглядит следующим образом: БНФ:
"sizeof " имя_данного Результат этой формы операции - размер памяти, отведенной под соответствующее данное в байтах, например, после описания массива символов char name[40];, операция sizeof name даст в результате 40.
Приоритеты операций Приоритеты и направление рассмотренных выше операций сведены в следующую таблицу. Операции одинакового приоритета объединены в группы, чем выше положение группы в таблице, тем выше приоритет операций группы. Таблица приоритетов рассмотренных выше операций
Операции одного приоритета
| Направление выполнения операции.
| ! ++ -- (тип) sizeof
|
| * / %
|
| + -
|
| << >>
|
| < <= > >=
|
| == !=
|
| &
|
| ^
|
| |
|
| &&
|
| ||
|
| = *= /= %= += -= <<= >>= &= ^= |=
|
|
|
|
|