
- •Повторение
- •Константы и константные переменные
- •Макросы
- •Операции, выражения и операторы Арифметические операции
- •Операции и приоритеты
- •Преобразования типов
- •Операции присваивания
- •Выражение и оператор
- •Упражнения
- •Задачи для решения
- •Указания и решения
- •Справочная информация. Таблица приоритетов операций
- •Советы по программированию
Операции присваивания
Выражение <Lvalue> = <Rvalue> есть выражение присваивания. В левой части находится переменная, в правой части – ее значение. Значение может быть константой, переменной, значение которой определено, выражением. Например, x = 0, y = x, z = x + y.
Выражение присваивания i = i + 2, в котором стоящая слева переменная повторяется и справа, можно написать в сжатом виде: i += 2. Операция +=, как и =, называется операцией присваивания. Большинству бинарных операций (аналогичных + и имеющих левый и правый операнды) соответствуют операции присваивания op=, где op ‑ одна из операций + - * / % << >> & ^ |. Если i ‑ переменная и e ‑ выражение, то i op= e эквивалентно i = i op (e) с той разницей, что i вычисляется только один раз. Обратите внимание на скобки вокруг e: x *= y + 1 эквивалентно x = x * (y + 1), но не x = x*y+1. Помимо краткости, операции присваивания обладают тем преимуществом, что они более соответствуют тому, как человек мыслит. Мы говорим "прибавить 2 к i" или "увеличить i на 2", а не "взять i, добавить 2 и затем вернуть результат в i", так что выражение i += 2 лучше, чем i = i + 2. Следует иметь в виду и то, что подобные операции присваивания могут помочь компилятору сгенерировать более эффективный код. Типом и значением любого выражения присваивания являются тип и значение его левого операнда после завершения присваивания.
Инкремент ++и декремент --
Операция ++ явно задает инкремент в отличие от неявного его задания с помощью сложения и присваивания. Различают постфиксный инкремент lvalue ++ и префиксный инкремент ++ lvalue.
По определению ++lvalue означает lvalue+=1, что, в свою очередь означает lvalue=lvalue+1 при условии, что содержимое lvalue не вызывает побочных эффектов. Выражение, обозначающее операнд инкремента, вычисляется только один раз.
Операции ++ и - - могут использоваться как префиксные и постфиксные операции. Значением ++x является новое (т. е. увеличенное на 1) значение x. Например, y = ++x эквивалентно y = (x += 1). Напротив, значение x++ равно прежнему значению x. Например, y = x++ эквивалентно y = (t = x, x += 1, t), где t - переменная того же типа, что и x.
Аналогично определяется операция декремента (--). Различают постфиксный декремент lvalue – и префиксный декремент – lvalue. По определению --lvalue означает lvalue -= 1.
Выражение и оператор
Выражение, скажем x = 0, или i++, или printf(…), становится оператором, если в конце его поставить точку с запятой, например: x = 0; i++; printf(...); В Си точка с запятой является заключающим символом оператора, а не разделителем. Фигурные скобки { и } используются для объединения объявлений и операторов в составной оператор, или блок, чтобы с точки зрения синтаксиса эта новая конструкция воспринималась как один оператор. После правой закрывающей фигурной скобки в конце блока точка с запятой не ставится.
Упражнения
1
Найдите ошибки в программе
#include studio.h
main
{
int i
i := 43
print ('В году i недель')
}
2
Что будет напечатано в приведенном примере, который является частью полной программы:
int n;
n = 2;
printf ("%d + %d = %d\n", n, n, n + n);
3
Что будет результатом каждого выражения:
a = b = 5
a + b
a++ + b
++a + b
--a + b
a-- + b