Основи програмування на С ++ для початківців

Инкремент и декремент в С

В предыдущей статье мы с вами рассмотрели бинарные операторы, которые используют для арифметических операций с двумя операндами (переменными). А в цьому уроці ми навчимося застосовувати унарні оператори, для которых необходим один операнд. Называются они инкремент ( ++ ) і декремент (). Роль этих операторов в том, чтобы изменить (увеличить или уменьшить соответственно) значение переменной на единицу, при этом значение будет перезаписано. Рассмотрим пример, в якому будемо змінювати значення змінної variable на единицу тремя различными способами:

После каждой операции в строках 11, 13 і 15. до значення змінної variable прибавляется единица. Как вы видите, найкоротша запис – это запись с использованием инкремента. Ниже, в строках 17 – 19, мы трижды применили декремент и в итоге получим значение variable уменьшенное на 3.

Компилируем:

инкремент и декремент

Оба этих унарных оператора могут иметь две формы: постфиксную ( когда оператор расположен сразу за переменной) і префиксную (оператор расположен перед переменной). У розглянутому прикладі ми застосовували постфіксні форми инкремента і декремента. Чим же відрізняються ці форми один від одного? И первая и вторая формы этих операторов выполняют одинаковые роли – збільшення або зменшення змінної на одиницю. Але якщо в рядку коду, где применяются инкремент или декремент, присутствуют еще какое-либо команды, тогда эти операторы по-разному себя ведут. Постфиксная форма будет применена после выполнения других команд. Посмотрим на следующем примере:

В результате выполнения кода строки 12, мы увидим на экране число 0. Так произойдет потому, що збільшення на одиницю виконається після виведення значення змінної variable на екран. Щоб переконатися, , что значение действительно изменилось – в строке 13 просим показать нам variable. А ось у разі застосування префиксной форми инкремента (рядок 16), переменная сразу перезапишется и уже только после этого произойдет вывод на экран. Для декремента все те ж саме, но с уменьшением на единицу.

Компилируем:

инкремент и декремент

Вот посмотрите еще на этот пример:

Результат:
инкремент и декремент

Постарайтесь понять, почему в результате операций строки 11, переменная a стала равна 10. Задавать вопросы в комментариях не запрещается.

80 думки про "Инкремент и декремент в С

  1. а якщо інкрементів купа і всі і додавання і віднімання а в кінці було множення,як рухатися знизу вгору або зверху вниз після множення

  2. ++variable + 1 + ++variable * 2=( 2+1+2) *2= 10
    1-е дію: ++variable;
    2-е дію: ++variable;
    3-Ця дія 4-ОЕ: складання з одиницею;
    5-е дію: *2.

    1. Тут ти трохи не правий, дії йдуть інакше:
      1) ++variable; 1+1= 2
      2)++variable; 2+1= 3 при цьому перше значення variable теж змінюється
      3)разом отримуємо 3 + 1 + 3 * 2 = 10

      1. що то не згоден:
        1) ++variable; 1+1= 2
        2)++variable; 2+1= 3 при цьому перше значення variable теж змінюється – Не змінюється!
        3)разом отримуємо 2 + 1 + 3 * 2 = 9

      2. Спочатку множення йде (1+1)*2; 4+1; 5+5

  3. Толі я дурень толі компілятори, 4 різних компілятора видають 9 а не 10, і чому ж це?)

    1. У стандарті Сі між двома точками послідовних обчислень зміна значення змінної можливо не більше одного разу.
      В даному випадку змінна variable змінюється 2 рази в одному вираженні. І в якому порядку піде обчислення – залежить від версії компілятора:
      або так: ++var(var = 2), ++var(var = 3), a = 3 + 1 + 3 * 2 = 10
      або так: ++var(var = 2), a = 2 + 1 +(++var)*2= 2 + 1 + 3 * 2 = 9
      мій компілятор також видав відповідь 9.
      Тому такі конструкції не потрібно ніколи використовувати, якщо тільки для навчальних цілей

  4. А як на рахунок порахувати ось такий код?

    int variable = 1;
    int a = 0;
    a = –variable + 1 – variable– * 2 ;

    або такий?
    а = змінна– + 1 + –variable * 2 ;

    або хоча-б такий?
    a = –variable + 1 + –variable * 2 ;

    ги… ги…

  5. Вирішив у себе у компіляторі розібратися з інкрементами

    int a = 1;
    int b;
    b = ++a + ++a;
    cout << b << endl;

    Тут виводить b = 6, як і замислювалося

    Але варто лише мені почати додавати наступні інкременти, як все ламається:

    int a = 1;
    int b;
    b = ++a + ++a + ++a;
    cout << b << endl;

    Повинне вивести 12, але чомусь виводить 10. І з наступним додаванням інкрементів ситуація повторюється – замість 20 виводить 15

    1. може: б INT = 0;
      щоб сміття не засмоктував з пам'яті через відсутність певності

  6. за правилами спочатку виконав множення : 2 * 2 = 4
    далее : 2 + 1 + 4 = 7 .
    якщо правильна відповідь 10 , то префіксний інкремент має
    мати перевагу виконання перед множенням , однак
    у статті на це не вказано .
    поправте мене або поясніть конкретніше рішення задачі щодо порядку виконання знаків !

залишити коментар

Ваша електронна адреса не буде опублікований. Обов'язкові поля позначені * *