Операции присваивания, условная операция. Приоритеты операций и порядок вычислений. Лекция 11

Содержание

Слайд 2

Операция присваивания переменная = выражение; Механизм выполнения операции присваивания: вычисляется выражение

Операция присваивания

переменная = выражение;
Механизм выполнения операции присваивания: вычисляется выражение и

его результат заносится в память по адресу, который определяется именем переменной, находящейся слева от знака операции. То, что ранее хранилось в этой области памяти, теряется.
a = b + c / 2;
x = 1;
x = x + 0.5;
Для правого операнда операции присваивания должно существовать неявное преобразование к типу левого операнда.
Слайд 3

Операция присваивания Множественное присваивание выполняет присваивание значений сразу нескольким переменным одновременно:

Операция присваивания

Множественное присваивание выполняет присваивание значений сразу нескольким переменным одновременно:
int a,

b, c;
a = b = c = 34;
Операции присвоения имеют низкий приоритет: вначале будет вычисляться значение правого операнда и только потом будет идти присвоение этого значения левому операнду.
int a, b, c;
a = b = c = 34 * 2 / 4; //

17

Слайд 4

Операция присваивания В языке C# существуют сложные (составные, сокращенные) формы операции

Операция присваивания

В языке C# существуют сложные (составные, сокращенные) формы операции присваивания,

представляющие собой комбинации операции присваивания и арифметических операторов.
Выражение вида
переменная = переменная оператор выражение
можно переписать следующим образом:
переменная оператор= выражение
Оператор х = х+10;
аналогичен оператору х += 10;
Слайд 5

Сложные операции присваивания В сложных (составных) операциях присваивания ( +=, *=,

Сложные операции присваивания

В сложных (составных) операциях присваивания ( +=, *=, /= и т п.) при вычислении

выражения, стоящего в правой части, используется значение из левой части. Например, при сложении с присваиванием ко второму операнду прибавляется первый, и результат записывается в первый операнд, то есть выражение a += b является более компактной записью выражения a = a + b.
Выражение составного присваивания с точки зрения реализации не эквивалентно простому (первому) присваиванию, так как в первом к переменной приходится обращаться дважды.
Слайд 6

Сложные операции присваивания +=: присваивание после сложения (сложение с присваиванием). A

Сложные операции присваивания

+=: присваивание после сложения (сложение с присваиванием).  
A +=

B  эквивалентно A = A + B
-=: присваивание после вычитания (вычитание с присваиванием).  
A -= B эквивалентно A = A - B
*=: присваивание после умножения (умножение с присваиванием).
 A *= B эквивалентно A = A * B
/=: присваивание после деления (деление с присваиванием).
 A /= B эквивалентно A = A / B
Слайд 7

Сложные операции присваивания %=: присваивание после деления по модулю (деление по

Сложные операции присваивания

%=: присваивание после деления по модулю (деление по модулю

с присваиванием).
 A %= B эквивалентно A = A % B
&=: присваивание после поразрядной конъюнкции (поразрядная конъюнкция с присваиванием).
A &= B эквивалентно A = A & B
|=: присваивание после поразрядной дизъюнкции (поразрядная дизъюнкция с присваиванием).
 A |= B эквивалентно A = A | B
Слайд 8

Сложные операции присваивания ^=: присваивание после операции исключающего ИЛИ (исключающее ИЛИ

Сложные операции присваивания

 ^=: присваивание после операции исключающего ИЛИ (исключающее ИЛИ с

присваиванием).
 A ^= B эквивалентно A = A ^ B
<<=: присваивание после сдвига разрядов влево (сдвиг разрядов влево с присваиванием).
 A <<= B эквивалентно A = A << B
>>=: присваивание после сдвига разрядов вправо (сдвиг разрядов вправо с присваиванием).
A >>= B эквивалентно A = A >> B
Слайд 9

Сложные операции присваивания Результатом операции сложного присваивания является значение, записанное в

Сложные операции присваивания

Результатом операции сложного присваивания является значение, записанное в левый

операнд.
Операции присваивания правоассоциативны, то есть выполняются справа налево, в отличие от большинства других операций ( a = b = c означает a = (b = c) ).
У составных операторов присваивания имеются два главных преимущества. Во-первых, они более компактны, чем их "несокращенные" эквиваленты. И во-вторых, они дают более эффективный исполняемый код, поскольку левый операнд этих операторов вычисляется только один раз.
Слайд 10

Сложные операции присваивания int a = 10; a += 10; //

Сложные операции присваивания

int a = 10;
a += 10;      //
a -= 4;        

//
a *= 2;        //
a /= 8;         //
a <<= 4;      //
a >>= 2;      //

20

16

32

4

64

16

Слайд 11

Условная операция (тернарный оператор) Выражение__1 ? Выражение_2: Выражение_3; Операция "?" выполняется

Условная операция (тернарный оператор)

Выражение__1 ? Выражение_2: Выражение_3;
Операция "?" выполняется следующим образом:

сначала вычисляется Выражение__1, которое должно быть типа bool. Если оно истинно, вычисляется Выражение_2, и его значение становится результатом всей операции. Если Выражение_1 ложно, вычисляется Выражение_3, и его значение становится результатом операции. Выражение__1 и Выражение_2 могут иметь разные типы. Тип результата зависит от возможности преобразования типов этих выражений.
Слайд 12

Условная операция (тернарный оператор) double yv2; // результат может быть только

Условная операция (тернарный оператор)

double yv2; // результат может быть только

// вещественным в данном примере
int xv;
xv = 10;
yv2 = (xv > 9) ? 100 : 2.0;
Console.WriteLine("т. к. "+ xv+" > 9, то рез-т = " + yv2);
xv = 1;
yv2 = (xv > 9) ? 100 : 2.0;
Console.WriteLine("т. к. " +xv+ " < 9, то рез-т = " + yv2);
х = 10, y;
if (x>9) у = 100;
else у = 200;
Слайд 13

Слайд 14

Слайд 15

Слайд 16

Слайд 17

Пример 1 using System;namespace ConsoleApplication1{ class Class1 { static void Main()

Пример 1

using System;namespace ConsoleApplication1{
class Class1 {
static void

Main() {
Console.Write( "Введите х: " );
double x = double.Parse( Console.ReadLine() );
Console.Write( "Введите y: " );
double y = double.Parse( Console.ReadLine() );
Console.WriteLine( "Максимум из х и y : " + Math.Max(x, y) );
double z = Math.Pow(Math.Sin(x), 2) + Math.Pow(Math.Sin(y), 2);
Console.WriteLine( "Сумма квадратов синусов х и y : " + z );
} } }