Студопедия

КАТЕГОРИИ:


Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748)

ЗАМЕЧАНИЕ. Операции присваивания

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

Условная операция

Условная операция (?:) — тернарная, то есть имеет три операнда. Ее формат:

операнд_1? операнде: операнд_3

Первый операнд — выражение, для которого существует неявное преобразование к логическому типу. Если результат вычисления первого операнда равен true, то результатом условной операции будет значение второго операнда, иначе — третье­го операнда. Вычисляется всегда либо второй операнд, либо третий. Их тип мо­жет различаться.

Тип результата операции зависит от типа второго и третьего операндов:

  1. если операнды одного типа, он и становится типом результата операции (Это наиболее часто используемый вариант применения тернарной операции.);

2. иначе, если существует неявное преобразование типа от операнда 2 к операн­ду 3, но не наоборот, то типом результата операции становится тип операнда 3;

3. иначе, если существует неявное преобразование типа от операнда 3 к операн ду 2, но не наоборот, то типом результата операции становится тип операнда 2

4. иначе возникает ошибка компиляции.

Условную операцию часто используют вместо условного оператора if для сокращения текста программы.

 

Пример применения условной операции: требуется, чтобы некоторая це­лая величина увеличивалась на 1, если ее значение не превышает n, а иначе при­нимала значение 1. Это удобно реализовать следующим образом:

i = (i < n)? i + 1: 1;

Условная операция правоассоциативна, то есть выполняется справа налево. На­пример, выражение
а? b: с? d: е вычисляется как а? b: (с? d: e). Строго говоря, такой «хитрой» записи следует избегать. Программа не должна напоми­нать шараду.

Операции присваивания (=, +=, -=, *= и т. д.) задают новое значение переменной, а также свойству, событию или индексатору. Эти операции могут использоваться в программе как законченные операторы.

Формат операции простого присваивания (=):

переменная = выражение

Механизм выполнения операции присваивания такой: вычисляется выражение и его результат заносится в память по адресу, который определяется именем пере­менной, находящейся слева от знака операции. То, что ранее хранилось в этой об­ласти памяти, естественно, теряется. Схематично это полезно представить себе так:

Переменная <- Выражение

Напомним, что константа и переменная являются частными случаями выражения.

 

Примеры операторов присваивания:

а = b + с / 2;

b = а;

а = Ь:

х = 1;

х = х + 0.5;

Обратите внимание: b = а и а = b — это совершенно разные действия!

Чтобы не перепутать, что чему присваивается, запомните мнемоническое правило: присваивание — это передача данных «налево».

Начинающие часто делают ошибку, воспринимая присваивание как аналог ра­венства в математике. Чтобы избежать этой ошибки, надо понимать меха­низм работы оператора присваивания. Рассмотрим для этого последний пример (х = х + 0.5). Сначала из ячейки памяти, в которой хранится значение перемен­ной х, выбирается это значение. Затем к нему прибавляется 0.5, после чего полу­чившийся результат записывается в ту же самую ячейку, а то, что хранилось там ранее, теряется безвозвратно. Операторы такого вида применяются в про­граммировании очень широко.

Для правого операнда операции присваивания должно существовать неявное пре­образование к типу левого операнда. Например, выражение целого типа можно присвоить вещественной переменной, потому что целые числа являются подмно­жеством вещественных, и информация при таком присваивании не теряется:

вещественнаяпеременная:= целоевыражение;

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

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

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

ЗАМЕЧАНИЕ

В документации написано, что тип результата совпадает с типом левого операнда, если он не менее int. Это означает, что если, например, переменные а и b имеют тип byte, присваивание а += b недопустимо и требуется преобразовать тип явным обра­зом: а += (byte)b. Однако на практике компилятор ошибку не выдает.

Напомню, что операции присваивания правоассоциативны, то есть выполняют­ся справа налево, в отличие от большинства других операций (а = b = с озна­чает а = (b = с)).


<== предыдущая лекция | следующая лекция ==>
Условные логические операции | Class Program
Поделиться с друзьями:


Дата добавления: 2014-01-07; Просмотров: 271; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.008 сек.