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

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

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

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

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

Привет всем!

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

Порядок вычисления выражения в msvc c++ - C++
Доброго дня всем. Понимаю, что компил оффтопик, но всё же. Пусть у нас есть выражение a = foo() + bar(); Известно, что стандарт плюсов...

Опишите процесс вычисления выражения заданного выражения 3 + 2 * x -0,5 – 4 / x. Обраб отайте ошибку извлечения квадратного корня из отрицательного - C++
#include "stdafx.h" #include <iostream> #include <stdio.h> #include <conio.h> #include <string> #include <sstream> #include...

порядок вычисления выражений - C++
порядок вычисления выражений x>100\left| \right|x<=10 и y==0

Порядок вычисления операций - C++
У Страуструпа написано, что int i = 5; v = i++; Может вызвать неправильный результат, так как порядок выполнения операций не...

Порядок вычисления в условных выражениях - C++
Привет ! Есть такой код: int Value = 0; // // Допустим, SomeFunction всегда меняет аргумент // на ненулевой и всегда...

Порядок вычисления операндов при сложении - C++
Есть такой пример int I = 2, k; k = (I=10)*(I=20); Чему в этом примере равно значение K?? 400, Так как последнее...

5
fasked
Эксперт С++
4942 / 2522 / 180
Регистрация: 07.10.2009
Сообщений: 4,311
Записей в блоге: 1
16.04.2012, 08:36 #2
Цитата Сообщение от _Eldar_ Посмотреть сообщение
(p | e++ >> 2)
А вот тут сначала выполняется "ИЛИ" или "сдвиг" по-Вашему?
0
_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 минут
Ну так почему префиксный инкремент выполняется самым первым, игнорируя скобки и порядок операции "&" (слева направо). Кто знает?
0
fasked
Эксперт С++
4942 / 2522 / 180
Регистрация: 07.10.2009
Сообщений: 4,311
Записей в блоге: 1
16.04.2012, 09:08 #4
_Eldar_, я что-то сразу проглядел. Этот код и не должен выполняться, так как Вы ожидаете. Одна переменная изменяется дважды в пределах одной точки следования. А согласно стандарту языка это называется unspecified behavior. Нельзя так писать, потому что последствия непредсказуемы. Скорее всего, используя другой компилятор, Вы получите другой результат при таком коде.

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

Добавлено через 3 минуты
fasked, и причем это не опечатка(, во всех вариантах лабы переменные изменяются дважды в одной точке следования. Ладно тема закрыта.
0
fasked
Эксперт С++
4942 / 2522 / 180
Регистрация: 07.10.2009
Сообщений: 4,311
Записей в блоге: 1
16.04.2012, 10:09 #6
_Eldar_, как вариант, если это позволяется, можно разбить выражение на несколько.
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
16.04.2012, 10:09
Привет! Вот еще темы с ответами:

Вычисления выражения - C++
Составьте программу для вычисления выражения f=max(A)/max(C)-max(B) где A, B, C, - массивы целых чисел

Программа вычисления выражения - C++
Написала программу которая вычисляет выражение \sinh \left(x \right)*\tan \left(x \right)-\tan \left(2+\sinh \left(x-1 \right)...

Приложение для вычисления выражения - C++
Нужно разработать приложение для вычисления выражения.Корень x в 5 степени умножить на сумму arctg z и квадратного cos от x. Я начал но...

Составить алгоритм вычисления выражения - C++
Составить алгоритм вычисления следующей функции F=\sum_{i=1}^{n}\left(x_i+a^n \right)+b^m+\sum_{i=1}^{m}\left(y_i+b^4...


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

Или воспользуйтесь поиском по форуму:
6
Yandex
Объявления
16.04.2012, 10:09
Ответ Создать тему
Опции темы

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