Уровень приоритета операции равен 14, выполняются такие операции справа налево.
Операция простое присваивание "="
Тип операндов: арифметические, указатели, объединения или структуры. Тип результата: если оба операнда имеют арифметический тип, то значение правого операнда преобразуется к типу левого операнда.
Использование:
v=eПрисваивание значения e переменной v.
Пример:
x=y;Операция сложное присваивание "="
Обозначим <знак> один из знаков: +, -, *, /, %, >>, <<, &, ^, |.
В результате выполнения операции присваивания
v=eгде v - переменная, а e - выражение, значение выражения становится новым значением переменной v.
Операция присваивания
v <знак>= eприблизительно эквивалентна оператору присваивания
v = v<знак> eПример 1:
y+=2; /* Увеличение переменной y на 2 */p+=n;x-=3;ptr-=2;timesx*=x;x/=2;x%=10;x>>=4;x<<=1;remitems&=mask;control^=seton;additems |=mask;Типы операндов и результата сложного оператора присваивания можно определить на основании этой эквивалентности. Однако приведенный эквивалент для сложного оператора присваивания не совсем точен. В выражении
|
|
операнд v вычисляется только один раз, в то время как в выражении
v = v <знак> eэтот операнд вычисляется дважды. Это различие проявляется в побочных эффектах, связанных с вычислением операнда v, например, при изменении значения какой-либо переменной. Рассмотрим это на примерах:
a[i++]* = n;При выполнении вычисление левого операнда дает побочный эффект - увеличение значения переменной i. Следовательно, это присваивание не эквивалентно присваиванию
a[i++] = a[i++]*n;.Эквивалентом первой операции присваивания может служить последовательность операций
a[i]=a[i]*n;i=i+1;а эквивалентом второй - последовательность операций
a[i]=a[i+1]*n;i=i+2;или последовательность операций
a[i+1]=a[i]*n;i=i+2;в зависимости от того, какая часть операции присваивания вычисляется раньше - левая или правая. Порядок таких вычислений не определен.
Операция, уровень приоритета которой равен 15
Уровень приоритета операции равен 15, выполняются такие операции слева направо.