Что происходит с предыдущим значением переменной после присваивания ей нового значения кратко

Обновлено: 05.07.2024

Самый простой способ взаимно менять значения переменных — использование swap(a, b) или же аналогичного стандартного метода. Тем не менее, важно понимать как работает операция по обмену значений двух переменных, что мы покажем на нескольких примерах.

Для начала продемонстрируем неправильную реализацию и выясним, что в ней не так.

Ошибочная реализация

Если вы попытаетесь выполнить обмен значений этим способом, то увидите, что теперь в обеих переменных хранится значение переменной b . Происходит это ввиду построчного выполнения кода. Первая операция присваивания сохраняет значение переменной b в переменную a . Затем вторая — новое значение a в b , иными словами значение b в b . Таким образом, мы полностью теряем содержание контейнера a .

Теперь обратимся к правильной реализации.

С использованием буфера

Буфером в данном случае называется дополнительная используемая память. Давайте разберёмся зачем она здесь нужна. Если помните, в неправильной реализации мы потеряли значение переменной a после первой операции присваивания, в связи с чем в обеих доступных переменных осталось значение b . Чтобы этого избежать нам понадобится ещё одна переменная — c . В таком случае правильный алгоритм будет выглядеть так:

Для наглядности разберём его пошагово:

  1. Присваиваем переменной c значение переменной a . Сейчас в a записана a , в b — b , а в c — a .
  2. Присваиваем переменной a значение переменной b . Теперь в a хранится b , в b — также b и в c — a .
  3. Присваиваем переменной b значение переменной c . Сейчас в a находится старое значение b , в b — a , ну и в c остаётся a .

Как вы видите, переменная c после выполнения алгоритма не нужна, поэтому далee в программе её можно не использовать и даже вовсе удалить из памяти.

Сразу стоит заметить, что это самое краткое и экономное решение задачи, но можно использовать и больше переменных, не так ли?

Нам повезло, что сейчас вопрос экономии оперативной памяти не стоит так остро, как 20-30 лет назад. Тем не менее, в те времена swap был востребован не меньше, поэтому умные люди нашли способ заменить значения двух переменных без ввода третьей.

Арифметика

Сложение / вычитание

Для лучшего восприятия снова разберём алгоритм построчно:

  1. Присваиваем переменной a сумму значений переменных a и b . Сeйчас в a записано значение a + b , а в b всё ещё b .
  2. Переменной b присваиваем разность между новым значением переменной a и переменной b . В a также хранится a + b , но в b уже a .
  3. Наконец, присваиваем переменной a результат вычитания b из обновлённого значения a . Получается, что в a теперь содержится b , а в b — a .

Для C-подобных языков сокращённая запись этого алгоритма выглядит так:

Умножение / деление

Аналогичный способ решения задачи получается при замене сложения умножением и вычитания делением:

В сокращённом варианте:

Вычитание / Сложение

Вообще, в математике действие вычитания отсутствует и является сложением положительного и отрицательного чисел. Отсюда следует, что мы можем поменять местами операции сложения и вычитания:

Обратите внимание, что в последней строке знак у переменной a изменился, а саму строчку можно записать иначе: a = b - a; .

Такой же принцип можно использовать поменяв местами деление и умножение.

Недостатки арифметического метода

Второй важный нeдостаток это область применения — числа. Согласитесь, менять значения пeрeмeнных, содержащих объeкты попросту нe получится без перегрузки операции. Впрочeм, дажe с числами могут возникнуть проблемы — арифметика для вeщeствeнных чисeл можeт выполняться некорректно, что приведёт к неожиданному результату.

Eстeствeнно, существует и менее очевидный способ рeшeния задачи без использования дополнительной памяти. Он основан на свойствах логических операций и работает с битовым представлением числа, а значит быстрее арифметического метода.

Битовые операции

Для любитeлeй коротких записeй приведём код одной строчкой. XOR в C-подобных языках замeняeтся знаком ^ :

Однако помните о точках следования. Из-за них этот код может вести себя непредсказуемо и давать разные результаты, поэтому никогда не используйте его в production коде.

Обязательно посмотрите более подробный разбор решения через битовые операции от Г. Лакмана Макдауэлла, автора известного сборника задач с собеседований, который есть в одной из наших книжных подборок.

что происходит с предыдущим значением переменной после присваивания ей нового значения?

Значение переменной переприсваивается тоесть переменная воспринимает новое знеачение . Ветхое значение перезаписывается и больше система его не знает, используя только новое. Пример как учитель на дощечке написал, потом стер и написал новое.

Оно пропадает. Вообщем у каждой переменной есть адресок который начиная с которого ей выделенно n - б в зависимости от типа. Например переменная типа integer - занимает два б памяти. После выделения адреса для переменной там может находиться какое-угодно значение. При исполнении оператора присваивания, по адресам выделенным для переменной заносятся соответствующие значения. Ветхое значение переменной безвозвратно теряется.

Пожалуйста, приостановите работу AdBlock на этом сайте.

Как Вы помните, переменные нужны чтобы хранить в них какие-то данные. Разберёмся как использовать переменные по их прямому назначению. Основной вопрос такой: "Как сохранить значение в переменной". Или вспоминая аналогию с коробкой "Как положить что-то в коробку?"

Ответ прост. Для этого существует специальный оператор, который называется оператором присваивания и обозначается символом равно " code-left">

Листинг 1. Присваивание значения переменной

В примере выше показаны два способа присвоить значение переменной. В первом случае мы сначала создаём переменную, а потом записываем в неё значение, а во втором случае мы сразу создаём переменную и присваиваем ей значение.

Второй вариант записи короче, но делает в то же самое, что и первый. Берёт значение, которое записано справа от знака равно, и сохраняет его в переменную, которая записана слева от от него.

Не забывайте ставить после очередной команды точку с запятой.

Есть несколько важных моментов на которых надо отдельно заострить внимание:

  • в некоторых языках программирования, после того как вы создали переменную, в ней сразу же хранится значение нуль. В языке Си это не так. Пока переменной не присвоено какое-нибудь значение, в ней будет храниться "мусор". Как этот мусор выглядит мы посмотрим на следующем уроке.
  • справа от знака равно НЕ обязательно должно быть записано какое-то конкретное число, там может быть записано арифметическое выражение или имя переменной.

Остановимся на втором пункте подробнее. Чтобы лучше разобраться давайте обратимся к примерам.

Если справа от знака равно записано выражение, то сначала вычисляется его значение и уже оно сохраняется в переменную, которая записана слева от =.

Когда переменной присваивается значение, то то, что хранилось в ней до этого удаляется.

Обратите внимание, новое значение не добавляется к старому, а полностью заменяет его. Я как-то говорил, что переменные похожи на коробки, но только на первый взгляд. Теперь мы видим, что наша аналогия с коробкой не совсем точная. Если бы в коробке лежало десять шариков, и мы бы туда положили ещё пять, то их стало бы 15.

В выражении справа от знака равенства могут использоваться другие переменные, которые объявлены ранее. Вместо них в выражение подставляются значения, которые в них хранятся в данный момент.

При вычислении выражения n - 3, n равняется 5. Это потому, что исходное значение 10, заданное при инициализации, мы в программе изменяли. А при вычислениях используется текущее значение переменной.

В выражении справа от знака равенства может быть использована сама переменная.

Кажется, что это какой-то порочный круг, но на самом деле проблем здесь не возникнет. Т.к. сначала вычисляется выражение справа, а только потом происходит присваивание. По аналогии с предыдущим примером при вычислении значения справа от знака равно вместо переменной n будет подставлено её текущее значение, т.е. 10. Потом будет произведено сложение и присваивание.

Ещё один поучительный пример.

Если Вы подумали что 5, то это неправильно. Никто не знает, что в ней будет записано. Т.к. неизвестно, что было записано в переменной z. Ещё раз напоминаю, что если переменной не присвоено никакое значение, в ней хранится не нуль, а неизвестно что.

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

Теперь ещё один важный момент, который надо понимать. Когда я рассказывал о типах данных, я говорил, что в переменной можно хранить значения только того же типа, что и тип переменной. Например, в переменную целого типа нельзя положить вещественное число. Этот принцип применяется и с выражениями. Чтобы программа работала корректно, необходимо, чтобы тип выражения или переменной справа от знака присваивания совпадал с типом переменной.

Посмотрим несколько примеров.

Внимание на последнюю строчку! Хотя справа выражение целого типа, а слева вещественная переменная, данная команда всё равно будет работать так, как надо. Это из-за того, что все целые числа можно записать как вещественные, у которых дробная часть равна нулю. Подобная штука называется неявное приведение (преобразование) типов . С этой возможностью надо быть очень осторожным, т.к. компилятор не отслеживает такие ошибки. Другими словами программа будет скомпилирована, но работать будет неправильно. Мы ещё вернёмся к этому в следующем уроке, когда научимся выводить значение переменных на экран компьютера.

Практика


Решите предложенные задачи. Для удобства работы сразу переходите в полноэкранный режим

Что происходит с предыдущим значением переменной после присваивания и нового значения.


После присваивания нового значения, старое стирается(удаляется), и все.


Как вывести на экран значение переменной но так чтоб её значение было слово которое присвоит себе переменная в дальнейшем?

Как вывести на экран значение переменной но так чтоб её значение было слово которое присвоит себе переменная в дальнейшем.


Задача : Даны переменные А и В?

Задача : Даны переменные А и В.

Требуется обменять их значениями, т.

Е. переменная А должна получить значение В, а В - значение А.


После выполнения команды присваивания х : = х + у значение переменной х равно 3, а значение переменной у равно 5?

После выполнения команды присваивания х : = х + у значение переменной х равно 3, а значение переменной у равно 5.

Чему были равны значения переменных х и у до выполнения указанной команды присваивания?


После выполнения команды присваиванияx : = x + yзначение переменнойxравно7, а значение переменнойyравно25?

После выполнения команды присваиванияx : = x + yзначение переменнойxравно7, а значение переменнойyравно25.

Чему были равны значения переменныхxиyдо выполнения указанной команды присваивания!


Даны три переменные вещественного типа : A, B, C?

Даны три переменные вещественного типа : A, B, C.

Если их значения

упорядочены по возрастанию, то удвоить их ; в противном случае заменить

значение каждой переменной на противоположное.

Вывести новые значения

переменных A, B, C.

Как решить данный пример используя только тернарный оператор?


Можно ли использовать операцию присваивания для задания значения строки?

Можно ли использовать операцию присваивания для задания значения строки?


Составить программу присваивания элементам массива значение 5информатика?

Составить программу присваивания элементам массива значение 5


Переделите значение переменной с после исполнения данного алгоритма?

Переделите значение переменной с после исполнения данного алгоритма.

Символ обозначает оператор присваивания.


Даны две переменные вещественного типа : A, B?

Даны две переменные вещественного типа : A, B.

Перераспределить значения данных переменных так, чтобы в A оказалось меньшее из значений, а в B — большее.

Вывести новые значения переменных A и B в решит в VBA.


Помощь по VBA ?

Даны две переменные вещественного типа : A, B.

Перераспределить значения данных переменных так, чтобы в A оказалось меньшее из значений, а в B — большее.

Вывести новые значения переменных A и B.

Читайте также: