Урок 5.2. Оператор-выражение
5.2. Оператор-выражение
Любое выражение будет оператором, если за ним следует знак точка с запятой. Таким образом, оператор-выражение имеет следующий общий вид записи:
<выражение>; |
Как уже отмечалось, любой оператор может иметь метку, и далее при представлении общих форм записи операторов этот факт специально не отражается, но всегда подразумевается. Оператор-выражение относится к классу простых операторов Си. В результате выполнения в программе оператора-выражения вычисляется значение выражения в соответствии с теми операциями, которые в нем определены. Чаще всего в выражении имеется одна или несколько операций присваивания, и тогда оператор-выражение Си имеет тот же смысл, что и оператор присваивания в других языках программирования. Рассмотрим примеры фрагментов программ с использованием операторов-выражений.
Пример 5.2.1.
int x, y. z;
x = -3 + 4 * 5 - 6;
y = 3 + 4 % 5 - 6;
z = -3 * 4 % - 6 / 5;
В результате выполнения этих операторов х примет значение 11, у значение 1, а z значение 0. В соответствии с приоритетами операций распишем последовательность действий, используя круглые скобки.
Для х = -3 + 4 * 5 - 6 | Для у = 3 + 4 % 5 - 6 | Для z = - 3 * 4 % - 6 / 5 |
x = (-3)+4*5-6
x = (-3)+(4*5)-6 x = ((-3)+(4*5))-6 x = (((-3)+(4*5))-6) ( x = (((-3)+(4*5)-6)) |
y = 3+(4%5)-6
y = (3+(4%5))-6 y = ((3+(4%5)-6) ( y = ((3+(4%5)-6)) |
z = (-3)*4%(-6)/5
z = ((-3)*4)%(-6)/5 z =(((-3)*4)%(-6))/5 z = ((((-3)*4)%(-6))/5) ( z = ((((-3)*4)%(-6)/5)) |
Пример 5.2.2.
int x = 2, y, z;
x *= 3 + 2, x *= y = z = 4;
В этом примере оператор-выражение содержит выражение с запятой, состоящее из двух подвыражений. В начале вычисляется первое подвыражение, затем второе. В результате выполнения оператора-выражения z и у примут значение 4, а х значение 40.Обратите внимание, что при описании x инициализируется значением 2. Последовательность действий:
Для 1-го выражения | Для 2-го выражения |
х = х*(3+2)
х = (х*(3+2)) ( х = (х*(3+2))) |
(z = 4)(y = (z=4))
x = (x*(3+2))*(y=(z=4)) x = ((x*(3+2))*(y=(z=4))) ( x = ((x)*(3+2))*(y=(z=4)))) |
Пример 5.2.3.
int x = 2, y = 1, z = 0;
x = x && y || z;
y = x++ -1;
z = ++x - 1;
В результате выполнения этого фрагмента х примет значение 3, у примет значение 0, а z примет значение 2. В результате выполнения первого оператора-выражения х примет значение 1, так как правая часть операции присваивания ( логическое выражение ) будет ИСТИНА, затем после выполнения второго оператора х примет значение 2, ввиду того что в нем содержится постфиксная форма операции увеличения х++, и, наконец, при выполнении третьего оператора х увеличится еще на единицу, ввиду наличия префиксной формы ++х. Значения для у и для z очевидны и определяются спецификой применения постфиксной и префиксной операции для х.
Оставить комментарий