большая просьба помочь разобраться со следующим примером:
int a = -1;
a = a-- *a;
Почему консоль выводит ответ "2"?
В реальном коде крайне не рекомендуется в одном и том же выражении повторно использовать переменную, над которой выполняется операция инкремента или декремента.
ОбъяснениеПостфиксная операция работает так:
Расставим скобки согласно приоритету операторов и начнем вычислять:
a = (a--) * a // a: -1
a = -1 * a // a: -2
a = -1 * -2 // a: -2
a = 2 // a: -2 (все еще, потому что присвоение не отработало)
В итоге a
стало равно 2.
А чтобы понимать, почему написание такого кода сравнимо с использованием goto
(а по-моему, даже хуже), рассмотрим такой пример:
a = a * (a--) // a: -1
Думаете, операция в скобках выполнится первой? Нет, операции в C# выполняются слева направо, приоритеты и скобки только устанавливают ассоциативность. Так что сначала в выражение подставится результат "вычисления" первого операнда. А в C++, если я правильно помню, это вообще undefined behavior.
a = -1 * (a--) // a: -1
a = -1 * -1 // a: -2
a = 1 // a: -2
После того, как присвоение отработает, в a
будет 1.
Для тренировки предлагаю решить вручную классическую задачу
int i = 5;
i = ++i + ++i;
Должно получиться 13.
А когда использование этих операций допустимо?Когда вы не используете эту переменную в том же выражении, вы не будете думать, как второе ее вхождение подставится в это выражение. Пример:
while (--i > 0) ...
Постфиксный декремент возвращает значение переменной, данной на вход, а уже потом производит вычитание единицы из неё. Ход действий в данном случае: 1) a = -1; 2) a = a-- * a; 3) a = -1 * a; 4) Выполняется декремент, a = -2; 5) a = -1 * -2; 6) a = 2;
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
Текст самого задания: Отредактировать заданное предложение, удаляя из него все слова с нечетными номерами и переворачивая слова с четными...
Есть 2 таблицы, из одной я могу выбрать список нужных мне id:
Подскажите пожалуйста, есть код, в этом коде, происходит разложение текста в массив, после чего идет проверка текста с изменением его согласно...
Есть таблица Фильмов,Актеров и таблица соединяющая ид фильма и ид актераЕсть разметка