Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
programmer92ua
1 / 1 / 0
Регистрация: 15.04.2013
Сообщений: 29
#1

Разъяснение по приоритетам операций С++ - C++

25.01.2014, 00:37. Просмотров 809. Ответов 21
Метки нет (Все метки)

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include <iostream>
using namespace std;
int main()
{
    int a=2;
    int b=1;
    int c=0;
 
    if ( a <= b++ - c++)
    {
        a++;
        b--;
        c +=2;
    }
 
    cout << a << " " << b << " " << c << endl;
 
 
    return 0;
}
На выходе 2 2 1

Здравствуйте! Вот смотрю я в таблицу http://ru.cppreference.com/w/cpp/language/operator_precedence, оператор префиксный инкремент и декремент стоит на 3 позиции, а сложение и вычитание на 6 тогда условный оператор давал бы true, но он дает false, я так понимаю это связано с ассоциативностью, как она влияет на таблицу, что означает слева-направо справа-налево, как правильно пользоваться таблицей?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
25.01.2014, 00:37
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Разъяснение по приоритетам операций С++ (C++):

Разъяснение float f = 1.2F; - C++
Вчера читал статью про C++ и встретил код, написанный следующим методом float f = 1.2F; и пришел в замешательство. Переменная f...

Разъяснение кода - C++
Доброго времени суток, такая проблема, надеюсь поможете безвозмездно. Имеется программа &quot;шифрования&quot; Хочется чтобы спецы объяснили сам...

Разъяснение по коду - C++
Здравствуйте уважаемые киберфорумцы! Имеется вот такой код программы #include &lt;cmath&gt; #include &lt;iostream&gt; #include...

Разъяснение работы цикла while() - C++
Всем добрый день. Я начинающий программист, да и к тому же учусь на Java. А тут попался код, на С++, но в нем есть некоторые моенты,...

Разъяснение алгоритмов задачи о рюкзаке для новичков - C++
Есть несколько алгоритмов решения задачи о рюкзаке. Не могли бы вы написать комментарии к ним объясняющие какая процедура для чего нужна?...

Вставить между цифрами 1, 2,..., 8, 9 в данном порядке, знак одной из 4-х арифметических операций так, чтобы результат восьми послед-х операций =100 - C++
Вычисления проводятся слева-направо, ни одна операция не имеет приоритета. Добавлено через 2 минуты задача вынесла моск, прошу помочь

21
programmer92ua
1 / 1 / 0
Регистрация: 15.04.2013
Сообщений: 29
25.01.2014, 01:36  [ТС] #16
Цитата Сообщение от Croessmah Посмотреть сообщение
они описываются в любом учебнике и никакой экзотикой не являются
Тогда почему он не стоит на последнем месте в таблице?

Добавлено через 9 минут
Цитата Сообщение от Kuzia domovenok Посмотреть сообщение
При чём тут вообще приоритет операций? Тут надо автору смотреть на отличия префиксного инкремента от постфиксного!
И приоритет далеко не главное их отличие (и в данном примере роли не играет)
Я еще раз объясняю, я знаю разницу между ними, этот пример я составил себе сам, просто посмотрел в таблицу на приоритет он выше чем у вычитания, и подумал тогда почему он стоит выше, и задал вопрос логичный, а вы мне про то какое отличие между постфиксной и префиксной.
0
Croessmah
Ушел
Эксперт CЭксперт С++
13565 / 7716 / 873
Регистрация: 27.09.2012
Сообщений: 18,996
Записей в блоге: 3
Завершенные тесты: 1
25.01.2014, 01:41 #17
Цитата Сообщение от programmer92ua Посмотреть сообщение
и задал вопрос логичный
вот когда поймете
Цитата Сообщение от programmer92ua Посмотреть сообщение
то какое отличие между постфиксной и префиксной.
тогда вопрос отпадет сам собой.
0
programmer92ua
1 / 1 / 0
Регистрация: 15.04.2013
Сообщений: 29
25.01.2014, 01:54  [ТС] #18
Цитата Сообщение от Croessmah Посмотреть сообщение
вот когда поймете

тогда вопрос отпадет сам собой.

, разница состоит в том что префиксный оператор сначала увеличит значение, а потом возвратит его, постфиксный сначала возвратит потом увеличит.
C++
1
2
int a = 3;
int b = ++a; // a=4 , b =4
C++
1
2
int a = 3;
int b = a++; // a=4 , b =3
Вопрос не отпал сам собой, вы понимаете что я спрашиваю вообще?

Добавлено через 5 минут
Ахахах, меня осенило, как оператор он выполниться самый первый, просто по своей сути он изменит значение
после проверки.
0
Croessmah
Ушел
Эксперт CЭксперт С++
13565 / 7716 / 873
Регистрация: 27.09.2012
Сообщений: 18,996
Записей в блоге: 3
Завершенные тесты: 1
25.01.2014, 01:58 #19
Цитата Сообщение от programmer92ua Посмотреть сообщение
вы понимаете что я спрашиваю вообще?
угу.
Цитата Сообщение от programmer92ua Посмотреть сообщение
оператор префиксный инкремент и декремент стоит на 3 позиции, а сложение и вычитание на 6 тогда условный оператор давал бы true, но он дает false
А теперь возьмите это:
Цитата Сообщение от programmer92ua Посмотреть сообщение
постфиксный сначала возвратит потом увеличит.
и пройдите по своему коду:
C++
1
2
3
4
5
6
7
8
9
10
    int a=2;
    int b=1;
    int c=0;
 
    if ( a <= b++ - c++)//a = 2 , b тут будет равно 1, c = 0. Получаем 2<=1-0, это false
    {
        a++;
        b--;
        c +=2;
    }
переписать можно так:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
    int a=2;
    int b=1;
    int c=0;
 
 
    int temp_b = b ;
    int temp_c = c ;
    b+=1;
    c+=1;
    if ( a <= temp_b - temp_c)
    {
        a++;
        b--;
        c +=2;
    }
Добавлено через 1 минуту
Цитата Сообщение от programmer92ua Посмотреть сообщение
Ахахах, меня осенило, как оператор он выполниться самый первый, просто по своей сути он изменит значение
после проверки.
Цитата Сообщение от Croessmah Посмотреть сообщение
Постфиксные - сначала возвращают значение, а потом инкреминируют.
Цитата Сообщение от MrGluck Посмотреть сообщение
То есть постфиксные операции выполняются по выходу из логического блока или же до завершения инструкции.
Цитата Сообщение от programmer92ua Посмотреть сообщение
постфиксный сначала возвратит потом увеличит.
0
programmer92ua
1 / 1 / 0
Регистрация: 15.04.2013
Сообщений: 29
25.01.2014, 02:02  [ТС] #20
Цитата Сообщение от Croessmah Посмотреть сообщение
вот когда поймете

тогда вопрос отпадет сам собой.
Вот реально понимать разницу можно про разному, вот теперь я действительно понял, и мне не понятно почему Kuzia domovenok говорит причем тут приоритет, разве я не прав когда сейчас говорю что постфиксный оператор выполняется первый в моем примере и заставляет возвратить значение переменной вот что он делает, а уже потом выполняет инкремент, он выполняет 2 действия, и 1 приходится по приоритету на 2 месте, теперь правильно?
0
Croessmah
Ушел
Эксперт CЭксперт С++
13565 / 7716 / 873
Регистрация: 27.09.2012
Сообщений: 18,996
Записей в блоге: 3
Завершенные тесты: 1
25.01.2014, 02:06 #21
Даже если бы приоритеты были другие, это ничего бы не изменило и увеличение произошло бы уже после возвращения старых значений
0
programmer92ua
1 / 1 / 0
Регистрация: 15.04.2013
Сообщений: 29
25.01.2014, 02:11  [ТС] #22
Цитата Сообщение от Croessmah Посмотреть сообщение
Даже если бы приоритеты были другие, это ничего бы не изменило и увеличение произошло бы уже после возвращения старых значений
Тогда приоритет на эти операции не влияет, они такие по своей задумке.
Я не понял когда вы процитировали мои сообщения и поставили смайл, я же все верно написал?
Вы уж простите меня, вот я такой, не могу лукавить и говорить что я понял при этом, осознавая что не все то я понял, пока в голову не влезет не пойму.
0
25.01.2014, 02:11
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
25.01.2014, 02:11
Привет! Вот еще темы с ответами:

Задача (разъяснение) в алгоритм (программа, используя базовый и производный классы, создавала массив объектов типа производного класса) - C++
Задача на наследование классов, базовый класс - &quot;люди&quot;, производный - &quot;студенты&quot;...как я понял, а базовом надо создать символьную матрицу в...

Вывод статистики по приоритетам - GPSS
Если не вдаваться в подробности, то задача сводится к следующей. Генерируются 150 транзактов с интервалом времени 5 ± 3 . Из них 40%...

Клиент-сервер. Как расставить клиентов по приоритетам? - C#
есть Class server и много клиентов, функция типа void посылает string message. Как раставить клиентов по приоритетам? Заранее благодарен.

Разъяснение по ТЗ - PHP
Доброго времени суток, суть вопроса состоит в том что бы вы помогли мне разобраться с данным ТЗ. Что вам не ясно в данном ТЗ и какой...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.