Модераторы: Daevaorn
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Почему скобки влияют на результат в таком случае?? 
V
    Опции темы
ANTON_AL
Дата 28.9.2007, 19:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 292
Регистрация: 27.1.2007

Репутация: нет
Всего: нет



Доброго дня!


Такой код выводит ноль

Код

#include <conio.h>
#include <iostream>
using namespace std;





void main( )
{
    int N = 8 + (false)? 0 : 8;
    cout << N;

    getch( );
}



Если выражение
Код

    int N = 8 + (false)? 0 : 8;


заменить на
Код

    int N = 8 + ( (false)? 0 : 8 );


. . .то, всё будет так, как задумано -  получим число 16

Вопрос: почему скобки в таком выражении влияют на результат ??

Это сообщение отредактировал(а) ANTON_AL - 28.9.2007, 19:35
PM MAIL   Вверх
nickless
Дата 28.9.2007, 19:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Гентозавр
****


Профиль
Группа: Участник Клуба
Сообщений: 2976
Регистрация: 29.8.2005
Где: Germany

Репутация: 19
Всего: 181



Потому что у сложения приоритет выше, т.е. сначала вычисляется (8 + false) и после конвертации получается true, ну а дальше ясно
operator precedence


--------------------
user posted image

Real men don't use backups, they post their stuff on a public ftp server and let the rest of the world make copies
- Linus Torvalds
PM MAIL   Вверх
Fin
Дата 28.9.2007, 19:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Дракон->Спать();
**


Профиль
Группа: Участник
Сообщений: 687
Регистрация: 4.1.2006

Репутация: 3
Всего: 10



Потому что без скобок компилятор рассматривает эир выражение так:
Код

int N =( 8 + (false))? 0 : 8;

8+false =8
8 всегда true отсюдпа следует что N будет равно 0


--------------------
Пролетал мимо.
PM MAIL   Вверх
ANTON_AL
Дата 28.9.2007, 19:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 292
Регистрация: 27.1.2007

Репутация: нет
Всего: нет



Точно, спасибо!!

Это сообщение отредактировал(а) ANTON_AL - 28.9.2007, 19:48
PM MAIL   Вверх
UnrealMan
Дата 28.9.2007, 21:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 722
Регистрация: 30.3.2006

Репутация: 27
Всего: 32



Цитата(nickless @  28.9.2007,  20:40 Найти цитируемый пост)
operator precedence 

Вот хоть бы где-нибудь увидел хорошую таблицу приоритетов...
PM MAIL   Вверх
nickless
Дата 28.9.2007, 21:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Гентозавр
****


Профиль
Группа: Участник Клуба
Сообщений: 2976
Регистрация: 29.8.2005
Где: Germany

Репутация: 19
Всего: 181



Цитата(UnrealMan @  28.9.2007,  20:19 Найти цитируемый пост)
Вот хоть бы где-нибудь увидел хорошую таблицу приоритетов... 

Хм, а чем эта плоха?


--------------------
user posted image

Real men don't use backups, they post their stuff on a public ftp server and let the rest of the world make copies
- Linus Torvalds
PM MAIL   Вверх
UnrealMan
Дата 28.9.2007, 22:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 722
Регистрация: 30.3.2006

Репутация: 27
Всего: 32



Она довольно скудная (нету многих операторов) и в ней неправильно указан приоритет ?:
К sizeof вообще бесполезно приоритеты применять.

Ну и ассоциативность у :: конечно же left to right

Это сообщение отредактировал(а) UnrealMan - 28.9.2007, 22:36
PM MAIL   Вверх
nickless
Дата 28.9.2007, 23:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Гентозавр
****


Профиль
Группа: Участник Клуба
Сообщений: 2976
Регистрация: 29.8.2005
Где: Germany

Репутация: 19
Всего: 181



Цитата(UnrealMan @  28.9.2007,  21:28 Найти цитируемый пост)
Она довольно скудная (нету многих операторов)

Мне всегда хватало... smile 
Я правда редко туда заглядываю, и корректность не проверял, лучше конечно посмотреть где-нибудь в стандарте.

Цитата(UnrealMan @  28.9.2007,  21:28 Найти цитируемый пост)
в ней неправильно указан приоритет ?:

А как надо?
Код
#include <iostream>
using namespace std;

int main()
{
    cout <<  ( false && true ? false : true ) << endl;
    cout <<  ( (false && true) ? false : true ) << endl;
    cout <<  ( false && (true ? false : true) ) << endl;
    cout << endl;

    cout <<  ( true || false ? false : true ) << endl;
    cout <<  ( (true || false) ? false : true ) << endl;
    cout <<  ( true || (false ? false : true) ) << endl;
    cout << endl;

    int i = 7;
    cout << ( i = 1 ? 0 : 4  ) << endl;
    cout << "i: " << i << endl;
    cout << ( i = (1 ? 0 : 4)  ) << endl;
    cout << "i: " << i << endl;
    cout << ( (i = 1) ? 0 : 4  ) << endl;
    cout << "i: " << i << endl;
}

Вроде всё совпадает...

А вообще это конечно оффтоп...


--------------------
user posted image

Real men don't use backups, they post their stuff on a public ftp server and let the rest of the world make copies
- Linus Torvalds
PM MAIL   Вверх
UnrealMan
Дата 28.9.2007, 23:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 722
Регистрация: 30.3.2006

Репутация: 27
Всего: 32



Цитата(nickless @  29.9.2007,  00:03 Найти цитируемый пост)
лучше конечно посмотреть где-нибудь в стандарте

В стандарте таблицы приоритетов нет smile Есть грамматика языка, на основе которой можно построить таблицу, но эта таблица не всегда будет работать.

Цитата(nickless @  29.9.2007,  00:03 Найти цитируемый пост)
А как надо?

Приоритет ?: совпадает с приоритетом присваивания

Цитата
conditional-expression:
    logical-or-expression
    logical-or-expression ? expression : assignment-expression

assignment-expression:
    conditional-expression
    logical-or-expression assignment-operator assignment-expression
    throw-expression

assignment-operator: one of
    = *= /= %= += -= >>= <<= &= ˆ= |=

a = b ? c : d = e эквивалентно a = (b ? c : (d = e))
PM MAIL   Вверх
nickless
Дата 28.9.2007, 23:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Гентозавр
****


Профиль
Группа: Участник Клуба
Сообщений: 2976
Регистрация: 29.8.2005
Где: Germany

Репутация: 19
Всего: 181



Цитата(UnrealMan @  28.9.2007,  22:18 Найти цитируемый пост)
Приоритет ?: совпадает с приоритетом присваивания

Действительно, будем знать smile 




--------------------
user posted image

Real men don't use backups, they post their stuff on a public ftp server and let the rest of the world make copies
- Linus Torvalds
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0725 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.