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

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

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

приоритет. странно - C++

09.08.2012, 12:29. Просмотров 459. Ответов 5
Метки нет (Все метки)

привет всем прогерам С++ =) есть такой вопрос.
Вроде ни чего сложного, но компилятор компилит это дело не так как ожидается.
Есть такое предложение.
IN = *block++ << 8;
если указатель block ссылается на начало массива M
M[10] = {1,2,3,4,5,6,7,8,9,10};
То по таблице приоритетов сначала выполнится ++ затем * после << и только в конце будет =.
В IN должно оказаться число 512, НОоо по каким то причинам там оказывается 256.
даже если записать выражение так
IN =((*block++) << 8);
все равно такой же результат =(.
Проведя эксперименты над этой строкой, разбивая ее на части и смотря, что выполняется первым, что вторым я пришел к выводу, что сначала выполняется * после << после = и лишь после ++ ..... и в строке
IN =((*block++) << 8);
скобки не могут исправить эту последовательность может кто знает? ПОЧЕМУ ТАК ВЫХОДИТ???
для справок: ИСпользую visual studio 2010, также keil. И там и там один и тот же результат =(
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
09.08.2012, 12:29
Здравствуйте! Я подобрал для вас темы с ответами на вопрос приоритет. странно (C++):

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

приоритет потоков - C++
Где можно найти информацию по таким темам: Относительный приоритет потока, динамическое изминение уровня потока?

приоритет операций - C++
while(*a++==*b++ &amp;&amp; *a!=NULL) хочу сравнить до конца строки &quot;а&quot;. почему не работает? где-то дело в приоритете, а где найти не...

Приоритет операторов - C++
int x = 4; int y = 5; cout &lt;&lt; (x == y ? ++x, ++y : --x, --y); Оператор запятая здесь не выполняется из-за приоритета? ...

Приоритет побитовых операций - C++
Всем привет. Столкнулся с непоняшкой: // Объявляем два массива и инициализируем их unsigned char A={0xFF, 0x03, 0x00,...

Приоритет преобразований внутри if - C++
Всем привет. Рассмотрим такой код: #include &lt;iostream&gt; class C { typedef void (C::*fp)() const; public: operator...

5
DaskOFF
112 / 112 / 9
Регистрация: 02.05.2012
Сообщений: 524
Записей в блоге: 1
09.08.2012, 12:34 #2
постфиксный инкремент, не?
приоритет. странно
0
CheshireCat
Эксперт С++
2896 / 1245 / 78
Регистрация: 27.05.2008
Сообщений: 3,405
09.08.2012, 12:37 #3
Оператор постинкремента инкрементирует указатель (block) и как результат своего выполнения возвращает то значение, которое указатель имел до выполнения операции инкремента; сам же указатель получает инкрементированное значение. Это не зависит от компилятора.
1
spoonnn
0 / 0 / 0
Регистрация: 06.08.2012
Сообщений: 2
09.08.2012, 12:42 #4
я думал что у скобок самый высокий приоритет в с++. т.е. если закрыть скобками (*block++), то выполнится ++, а после все остальное. Разве не так??

Добавлено через 1 минуту
Цитата Сообщение от CheshireCat Посмотреть сообщение
Оператор постинкремента инкрементирует указатель (block) и как результат своего выполнения возвращает то значение, которое указатель имел до выполнения операции инкремента; сам же указатель получает инкрементированное значение. Это не зависит от компилятора.
Спасибо это все объясняет=))
0
wtf?
19 / 19 / 0
Регистрация: 03.10.2010
Сообщений: 48
09.08.2012, 12:43 #5
Дело в том что ты используеш постфиксный инкремент, а он выполняется в самом конце, а в таблице приоритетов указан префиксный инкремент..
Нужно использовать префиксный тоисть:
IN = *(++block) << 8;
Таким образом сначала выполняется "++" потом "*", потом "<<" ну а потом уже присваивание
0
DaskOFF
112 / 112 / 9
Регистрация: 02.05.2012
Сообщений: 524
Записей в блоге: 1
09.08.2012, 12:43 #6
Цитата Сообщение от spoonnn Посмотреть сообщение
я думал что у скобок самый высокий приоритет в с++. т.е. если закрыть скобками (*block++), то выполнится ++, а после все остальное. Разве не так??
причем тут скобки ?
постфиксный инкремент срабатывает раньше, НО возвращает предыдущее значение!
1
09.08.2012, 12:43
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
09.08.2012, 12:43
Привет! Вот еще темы с ответами:

Как установить приоритет сервису - C++
Проблема в следующем:Я имею машину с двумя адресами...моя программа так же как и IIS сидит на 80 порту только на другом адресе...при...

Приоритет программы и кэш-память - C++
Всем привет! Подскажите пожалуйста, есть ли способы в коде программы установить ее приоритет? А также очень интересует - можно ли...

Приоритет. Обращение к элементу по постинкременту. - C++
while(buffer != ',' &amp;&amp; buffer != '\0') dest=buffer; Вот такой код, вопрос такой : сначала к j додается 1 или додается +1 после...

Приоритет операторов (расставить скобки) - C++
Необходимо расставить скобки в следующем выражении: a==b||a==c&amp;&amp;c&lt;5Объясните расстановку. Я думаю,что сначала вычислится c&lt;5(по...


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

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

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