В предыдущей статье мы с вами рассмотрели бинарные операторы, которые используют для арифметических операций с двумя операндами (переменными). А в цьому уроці ми навчимося застосовувати унарні оператори, для которых необходим один операнд. Называются они инкремент ( ++ ) і декремент (––). Роль этих операторов в том, чтобы изменить (увеличить или уменьшить соответственно) значение переменной на единицу, при этом значение будет перезаписано. Рассмотрим пример, в якому будемо змінювати значення змінної variable на единицу тремя различными способами:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | #include <iostream> using namespace std; int main() { setlocale(LC_ALL, "rus"); int variable = 0; cout << variable << endl; variable = variable + 1; // обычный способ cout << variable << " - variable = variable + 1" << endl; variable += 1; // комбинированный оператор += cout << variable << " - variable += 1" << endl; variable++; // используем инкремент ++ cout << variable << " - variable++" << endl; variable--; // используем декремент -- variable--; variable--; cout << variable << " - три раза variable--" << endl; return 0; } |
После каждой операции в строках 11, 13 і 15. до значення змінної variable прибавляется единица. Как вы видите, найкоротша запис – это запись с использованием инкремента. Ниже, в строках 17 – 19, мы трижды применили декремент и в итоге получим значение variable уменьшенное на 3.
Компилируем:
Оба этих унарных оператора могут иметь две формы: постфиксную ( когда оператор расположен сразу за переменной) і префиксную (оператор расположен перед переменной). У розглянутому прикладі ми застосовували постфіксні форми инкремента і декремента. Чим же відрізняються ці форми один від одного? И первая и вторая формы этих операторов выполняют одинаковые роли – збільшення або зменшення змінної на одиницю. Але якщо в рядку коду, где применяются инкремент или декремент, присутствуют еще какое-либо команды, тогда эти операторы по-разному себя ведут. Постфиксная форма будет применена после выполнения других команд. Посмотрим на следующем примере:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 | #include <iostream> using namespace std; int main() { setlocale(LC_ALL, "rus"); int variable = 0; // постфиксный инкремент // значение variable увеличится на 1 после показа на экран cout << variable++ << " - результат \"cout << variable++\" " << endl; cout << variable << " - изменённое значение" << endl; // префиксный инкремент // сразу увеличение на 1, потом показ на экран cout << ++variable << " - результат \"cout << ++variable\" " << endl; // та же логика для декремента // постфиксный декремент cout << variable-- << " - результат \"cout << variable--\" " << endl; cout << variable << " - изменённое значение" << endl; // префиксный декремент cout << --variable << " - результат \"cout << --variable\" " << endl; return 0; } |
В результате выполнения кода строки 12, мы увидим на экране число 0. Так произойдет потому, що збільшення на одиницю виконається після виведення значення змінної variable на екран. Щоб переконатися, , что значение действительно изменилось – в строке 13 просим показать нам variable. А ось у разі застосування префиксной форми инкремента (рядок 16), переменная сразу перезапишется и уже только после этого произойдет вывод на экран. Для декремента все те ж саме, но с уменьшением на единицу.
Компилируем:
Вот посмотрите еще на этот пример:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | #include <iostream> using namespace std; int main() { setlocale(LC_ALL, "rus"); int variable = 1; int a = 0; a = ++variable + 1 + ++variable * 2; cout << "a = " << a << endl; return 0; } |
Постарайтесь понять, почему в результате операций строки 11, переменная a стала равна 10. Задавать вопросы в комментариях не запрещается.
Не знаю чи прав я але я порахував так: спочатку йде множення ++а * 2 як а додається 1 і виходить 2 * 2 = 4, потім ++а + 1 = 6 +4= 10
чому ++а = 6? якщо до цього ++а було одно 2?
“потім ++а + 1 = 6 + 4”
Як часто оперують префіксною формою через її заплутаність ? Чи комфортна вона для програміста?
Напевно другий префікс має пріоритет над першим йому як головному члену товариства, потім пристала 1=5 , але перший префікс старший +1 по рангу і вона пристала до нього вдруге погладшала на один розмір. Ну а мотом вийшло а. або ой
а ні 4+1=5
5+5= 10
Я все думаю чому вчені кажуть що світ створив бог. Мені здається що . для них природа це декремент власного значення. Вони не хочуть повірити, що вона була створена перфіксно шляхом еволюції за довго до появи змінних..
Спочатку будуть виконані інкременти як такі, що володіють вищим пріоритетом для префіксної форми для (два рази) т.ч. variable набуде значення 3, потім виконаються інші оператори у виразі: 3 + 1 + 3*2 = 10.
a = variable + 1 + ++variable * 2;
1) ++variable + 1 = 3
2) ++variable * 2; спочатку variable * 2= 3*2 = 6
6) інкремент ++variable , т.е. вже 6-й і нічия 7.
4) 3+7 = 0
Вибачте , клавіша не пробила.
Буде 3+7=10
#include
using namespace std;
int main()
{
setlocale(LC_ALL, “rus”);
int variable = 1;
int a = 0;
a = variable + 1 + ++variable * 2;
cout << "a = " << a << endl;
return 0;
}
підсумок: а = 9
а в мене вийшло : 2 * 2 = 4;
————————— : (4 + 1) + 1;
—————————-: Итог 4 + 1 + 1 +4;
Перша дія – множення , друге – значення перше(в порядку зліва направо) стає рівним 5 . И + 1. Всего 10.
Може й не так , але якось відповідає порядку арифметичних дій , а далі значення змінної змінюється у бік збільшення… А який правильний варіант ??? Підкажіть !