5 / 5 / 0
Регистрация: 27.10.2012
Сообщений: 21
1

Объяснить почему переменная принимает данное значение

15.12.2016, 21:30. Показов 686. Ответов 6
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
C++
1
2
3
4
int v = 5;
int a = 0;
a = ++v + 10 + 1 + ++v * 2;
cout << "a = " << a << endl;
кто сможет объяснить, почему здесь а = 32 ? . Я понял как это вычисляет программа, но это немного странно.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
15.12.2016, 21:30
Ответы с готовыми решениями:

Неинициализированая переменная принимает значение -858993460
Здравствуйте форумчане. Есть проблема. Имеется код: #include &lt;iostream&gt; #include &lt;vector&gt;...

Переменная в цикле не принимает значение ноль
У меня есть цикл для переменной b, в который вложен цикл для переменной а: for (b = -2; b &lt; 5.01;...

Почему переменная b не принимает значение?
#define _CRT_SECURE_NO_WARNINGS #include&lt;stdio.h&gt; #include&lt;math.h&gt; double inline...

Переменная не принимает значение
Здравствуйте. Прошу вас помочь новичку Уже голову сломал, но никак не получается самому...

6
13 / 13 / 10
Регистрация: 23.08.2015
Сообщений: 131
15.12.2016, 21:44 2
Это как в математике. В начале выполняется умножение\деление, затем сложение и вычитание. Только тут приоритеты другие.
++v по приоритету выше чем умножение и сложение. (префиксная запись)
в то же время, v++ - ниже. (постфиксная запись)
Т.е. если бы ты писал v++, то вначале бы вычислялось уравнение со значением v = 5, а потом бы уже v увеличивалась бы на 1.

Следовательно, в начале программа выполняет ++v (дважды), получаем v = 7, затем умножение v*2 , получаем 14, затем сложение. Получаем 32.

Добавлено через 5 минут
Вот тут подробнее можешь ознакомиться с приоритетами операций

Приоритет операций C++
0
5 / 5 / 0
Регистрация: 27.10.2012
Сообщений: 21
15.12.2016, 21:47  [ТС] 3
да,да. я уже понял почему так. Я знаю про приоритеты.
Просто я не учел, что после того как выполнился второй инкремент(в правой части выражения), первый "++v" тоже стал на 1 больше то есть 7.
0
2022 / 1621 / 489
Регистрация: 31.05.2009
Сообщений: 3,005
16.12.2016, 00:18 4
На самом деле, что и в какой последовательности должно вычисляться в вышеприведённом примере, это вопрос скорее философский Почитайте о точках следования и всё станет понятно.
0
Любитель чаепитий
3742 / 1798 / 566
Регистрация: 24.08.2014
Сообщений: 6,016
Записей в блоге: 1
16.12.2016, 15:02 5
Цитата Сообщение от Maks_Tor Посмотреть сообщение
почему здесь а = 32 ?
Вообще-то тут UB.
http://en.cppreference.com/w/c... eval_order
0
Неэпический
17869 / 10634 / 2054
Регистрация: 27.09.2012
Сообщений: 26,736
Записей в блоге: 1
18.12.2016, 12:11 6
Цитата Сообщение от Maks_Tor Посмотреть сообщение
кто сможет объяснить, почему здесь а = 32 ?
Так устроен используемый Вами компилятор.
Вот здесь 32.
А здесь 31.
Причем оба ответа правильные.
0
425 / 229 / 87
Регистрация: 25.03.2009
Сообщений: 744
18.12.2016, 12:22 7
Maks_Tor,

Не по теме:

ну а если совсем серьезно, то никогда ничего подобного не пиши в коде.

0
18.12.2016, 12:22
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
18.12.2016, 12:22
Помогаю со студенческими работами здесь

Переменная не принимает заданное значение
Извиняюсь,если я создал тему не туда. С++ и С ,а отдельного подфорума с# не нашел. Не бейте...

Логическая переменная не принимает нужное значение
Здравствуйте. Не могу понять, почему переменная negative всегда остаётся false. Помогите,...

Функция find - переменная принимает неадекватное значение
long long w, p2=6; string s1, s2; s1 = &quot;SILE&quot;; s2 = &quot;NOSOROG&quot;; ...

Какое значение принимает переменная p после выполнения следующего фрагмента программы
Какое значение принимает переменная p после выполнения следующего фрагмента программы при заданной...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru