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

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

Войти
Регистрация
Восстановить пароль
 
_Eldar_
 Аватар для _Eldar_
44 / 29 / 3
Регистрация: 31.10.2009
Сообщений: 200
#1

Порядок вычисления выражения - C++

16.04.2012, 08:19. Просмотров 808. Ответов 5
Метки нет (Все метки)

Привет всем!

Не пойму как вычисляется выражение : p = (p | e++ >> 2) & (++p >> 1), при р = 3;
у меня результат: p = 0, хотя считаю все вручную получается р = 2.
Помоему сначала должно посчитаться выражение в первой скобке (p | e++ >> 2) (оно равно 3),
затем во второй скобке (++p >> 1) (равно 2), т.к. поразрядное "И" выполняется слева направо. А компилятор сначала увеличивает p на единицу, а уже потом делает остальные операции (ИМХО). Почему так происходит?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
16.04.2012, 08:19     Порядок вычисления выражения
Посмотрите здесь:

Опишите процесс вычисления выражения заданного выражения 3 + 2 * x -0,5 – 4 / x. Обраб отайте ошибку извлечения квадратного корня из отрицательного C++
C++ Вычисления выражения
Составить программу вычисления выражения C++
C++ порядок вычисления выражений
C++ Составить программу вычисления выражения
C++ Написать программу вычисления выражения
C++ Программа вычисления выражения
Порядок вычисления в условных выражениях C++
C++ Порядок вычисления операндов при сложении
C++ Порядок вычисления выражения в msvc c++
C++ Функция вычисления выражения с условиями
C++ Порядок вычисления операций

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
fasked
Эксперт C++
 Аватар для fasked
4929 / 2509 / 180
Регистрация: 07.10.2009
Сообщений: 4,306
Записей в блоге: 1
16.04.2012, 08:36     Порядок вычисления выражения #2
Цитата Сообщение от _Eldar_ Посмотреть сообщение
(p | e++ >> 2)
А вот тут сначала выполняется "ИЛИ" или "сдвиг" по-Вашему?
_Eldar_
 Аватар для _Eldar_
44 / 29 / 3
Регистрация: 31.10.2009
Сообщений: 200
16.04.2012, 09:01  [ТС]     Порядок вычисления выражения #3
fasked, сначала ИЛИ

Добавлено через 39 секунд
fasked, а затупил СДВИГ сначала

Добавлено через 2 минуты
fasked,
1) e++ >> 2 = 1
2) p | 1 = 3

Добавлено через 9 минут
Ну так почему префиксный инкремент выполняется самым первым, игнорируя скобки и порядок операции "&" (слева направо). Кто знает?
fasked
Эксперт C++
 Аватар для fasked
4929 / 2509 / 180
Регистрация: 07.10.2009
Сообщений: 4,306
Записей в блоге: 1
16.04.2012, 09:08     Порядок вычисления выражения #4
_Eldar_, я что-то сразу проглядел. Этот код и не должен выполняться, так как Вы ожидаете. Одна переменная изменяется дважды в пределах одной точки следования. А согласно стандарту языка это называется unspecified behavior. Нельзя так писать, потому что последствия непредсказуемы. Скорее всего, используя другой компилятор, Вы получите другой результат при таком коде.

Подробности здесь: http://alenacpp.blogspot.com/2005/11...ce-points.html
_Eldar_
 Аватар для _Eldar_
44 / 29 / 3
Регистрация: 31.10.2009
Сообщений: 200
16.04.2012, 09:20  [ТС]     Порядок вычисления выражения #5
fasked, Спасибо. Все понятно, хреново, что это задание лабораторной работы(

Добавлено через 3 минуты
fasked, и причем это не опечатка(, во всех вариантах лабы переменные изменяются дважды в одной точке следования. Ладно тема закрыта.
fasked
Эксперт C++
 Аватар для fasked
4929 / 2509 / 180
Регистрация: 07.10.2009
Сообщений: 4,306
Записей в блоге: 1
16.04.2012, 10:09     Порядок вычисления выражения #6
_Eldar_, как вариант, если это позволяется, можно разбить выражение на несколько.
Yandex
Объявления
16.04.2012, 10:09     Порядок вычисления выражения
Ответ Создать тему
Опции темы

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