Форум программистов, компьютерный форум CyberForum.ru

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

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

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

25.01.2014, 00:37. Просмотров 750. Ответов 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/lan...tor_precedence, оператор префиксный инкремент и декремент стоит на 3 позиции, а сложение и вычитание на 6 тогда условный оператор давал бы true, но он дает false, я так понимаю это связано с ассоциативностью, как она влияет на таблицу, что означает слева-направо справа-налево, как правильно пользоваться таблицей?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
25.01.2014, 00:37     Разъяснение по приоритетам операций С++
Посмотрите здесь:

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

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

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

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

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

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

Перегрузка операций - C++
Разработайте программу на языке С++, используя пользовательский тип данных – классы и перегрузку операций. Создайте класс Fraction...

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

Добавлено через 9 минут
Цитата Сообщение от Kuzia domovenok Посмотреть сообщение
При чём тут вообще приоритет операций? Тут надо автору смотреть на отличия префиксного инкремента от постфиксного!
И приоритет далеко не главное их отличие (и в данном примере роли не играет)
Я еще раз объясняю, я знаю разницу между ними, этот пример я составил себе сам, просто посмотрел в таблицу на приоритет он выше чем у вычитания, и подумал тогда почему он стоит выше, и задал вопрос логичный, а вы мне про то какое отличие между постфиксной и префиксной.
Croessmah
Модератор
Эксперт CЭксперт С++
13053 / 7316 / 815
Регистрация: 27.09.2012
Сообщений: 18,053
Записей в блоге: 3
Завершенные тесты: 1
25.01.2014, 01:41     Разъяснение по приоритетам операций С++ #17
Цитата Сообщение от programmer92ua Посмотреть сообщение
и задал вопрос логичный
вот когда поймете
Цитата Сообщение от programmer92ua Посмотреть сообщение
то какое отличие между постфиксной и префиксной.
тогда вопрос отпадет сам собой.
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 минут
Ахахах, меня осенило, как оператор он выполниться самый первый, просто по своей сути он изменит значение
после проверки.
Croessmah
Модератор
Эксперт CЭксперт С++
13053 / 7316 / 815
Регистрация: 27.09.2012
Сообщений: 18,053
Записей в блоге: 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 Посмотреть сообщение
постфиксный сначала возвратит потом увеличит.
programmer92ua
1 / 1 / 0
Регистрация: 15.04.2013
Сообщений: 29
25.01.2014, 02:02  [ТС]     Разъяснение по приоритетам операций С++ #20
Цитата Сообщение от Croessmah Посмотреть сообщение
вот когда поймете

тогда вопрос отпадет сам собой.
Вот реально понимать разницу можно про разному, вот теперь я действительно понял, и мне не понятно почему Kuzia domovenok говорит причем тут приоритет, разве я не прав когда сейчас говорю что постфиксный оператор выполняется первый в моем примере и заставляет возвратить значение переменной вот что он делает, а уже потом выполняет инкремент, он выполняет 2 действия, и 1 приходится по приоритету на 2 месте, теперь правильно?
Croessmah
Модератор
Эксперт CЭксперт С++
13053 / 7316 / 815
Регистрация: 27.09.2012
Сообщений: 18,053
Записей в блоге: 3
Завершенные тесты: 1
25.01.2014, 02:06     Разъяснение по приоритетам операций С++ #21
Даже если бы приоритеты были другие, это ничего бы не изменило и увеличение произошло бы уже после возвращения старых значений
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
25.01.2014, 02:11     Разъяснение по приоритетам операций С++
Еще ссылки по теме:

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

Перегрузка операций - C++
Доброго времени суток. Очень нужна помощь программистов. Есть такое задание: Создать класс, который запоминает римские числа в виде...

Перегрузка операций - C++
C++ Перегрузка операций.. Помоги написать прогу Определить класс для работы с квадратной матрицей. Получить величину к одним из...

Приоритет операций - C++
Здравствуйте, а не подскажите что в С-подобных языках приоритетнее: сложение/вычитание, побитовые операции, умножение/деление

Перегрузка операций - C++
Здравствуйте. Объясните механизма операции инкремента. Как работают эти строки: Counter(int c) : count(c) { } return Counter(count); ...


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

Или воспользуйтесь поиском по форуму:
programmer92ua
1 / 1 / 0
Регистрация: 15.04.2013
Сообщений: 29
25.01.2014, 02:11  [ТС]     Разъяснение по приоритетам операций С++ #22
Цитата Сообщение от Croessmah Посмотреть сообщение
Даже если бы приоритеты были другие, это ничего бы не изменило и увеличение произошло бы уже после возвращения старых значений
Тогда приоритет на эти операции не влияет, они такие по своей задумке.
Я не понял когда вы процитировали мои сообщения и поставили смайл, я же все верно написал?
Вы уж простите меня, вот я такой, не могу лукавить и говорить что я понял при этом, осознавая что не все то я понял, пока в голову не влезет не пойму.
Yandex
Объявления
25.01.2014, 02:11     Разъяснение по приоритетам операций С++
Ответ Создать тему
Опции темы

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