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

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

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

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

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

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

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

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

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

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

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

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

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

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

  1. в останньому прикладі все просто:
    a = variable + 1 + ++variable * 2;
    розіб'ємо на прості завдання:
    int variable = 1; variable дорівнює одиниці, значить:
    а = (1++ равно 2) +1 + (1++ равно 2) *2;
    а = 2 + 1 + 2 * 2;
    а = 5 *2; звідси = 10!!!

    1. Правильна відповідь у Вас вийшов випадково ))) Скажіть, скільки буде 2 + 2 * 2 ? ))

      З.Ы. Спочатку виконуються ВСЕ префіксние операції ;)

      1. не зовсім! ошибка)
        у множення пріоритет вище! + інкремент і декремент змінюють значення змінної, так що variable буде дорівнює 3…
        виходить: а = 3 + 1 +3 * 2; иначе: 3 + 1 + (3*2) = 4 + 6 = 10!

  2. “Постфіксний форма буде застосована після виконання інших команд.”

    Ось дивіться сюди: http://ru.cppreference.com/w/cpp/language/operator_precedence

    У Постфіксний декремента пріоритет вище ніж у префіксного. І це правильно і відповідає стандарту. Реально все набагато простіше ніж ви тут пишіть , а про a++ + ++a вже років 10 сперечаються школярі, які не дивилися далі носа. Різні стародавні компілятори обробляють цей приклад по різному.
    Але ти можеш переконатися, що
    std::cout << (A ++) + ++a;
    в g ++ поверне те ж саме що і
    std::cout << A ++ + ++a;
    тому що Постфіксний операція завжди виконується раніше.

  3. і ще, хлопців, розставляйте відступи одноманітно.

    Ось тут ви їх почали ставити: https://purecodecpp.com/archives/588 , але в першому лістингу пишіть

    main() {
    setlocale...
    }

    У другому

    main() {
    setlocale...
    }

    І далі приблизно так шпарить:

    if (NumberOfFinger == 1)
    cout << "\nРезультат: Большой палец \n"; // почему тут пробелов больше
    else if (NumberOfFinger == 2)
    cout << "\nРезультат: Указательный палец\n"; // чем здесь?

    Не знаю як вам, а мені відразу ріже око це свавілля.

    1. a = variable + 1 + ++variable * 2;

      1) ++variable – зробить variable = 2
      2) ++variable друга – зробить variable = 3
      3) variable * 2 значить 2 * 3 = 6
      4) 3 + 1 + 6 дасть 10

      1. І все одно як то не так адже variable спочатку 1 після префіксного инкремента перша дорівнює 2 тобто виходить 2+1+3*2 можливо через те, що множення виконується першим код повертається до початку і variable перша ще раз збільшується а потім вже складаються обидві частини тоді 3+1+3*2 верно

    1. да – спочатку множення. А коли виконується перша складання, variable вже дорівнює 3. Ще раз не збільшується

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

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