реклама на сайте
подробности

 
 
> Последовательность проведения операций в С
Мусатов Констант...
сообщение Feb 28 2007, 14:58
Сообщение #1


Частый гость
**

Группа: Участник
Сообщений: 188
Регистрация: 10-10-06
Пользователь №: 21 172



Помнит ли кто спецификацию языка С?
Мне казалось, что битовые операции должны выполняться раньше оперций сравнения.
Например, такой код
if( *ptr & 0x0F == 0x01 )
Сколько я помнил, сначала должна быть выполнена операция &, а потом ==. В отличие, например от
if( *ptr && 0x0F == 0x01 )
Где сначало должно пройти сравнение, а потом &&.

Если я не ошибаюсь, то ошибается IAR 4.40, он на первый пример полностью пропускает весь код, считая что 0x0F никогда не равен 0x01. Я решил этот вопрос скобками, но все же...
if( (*ptr & 0x0F) == 0x01 )
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
zltigo
сообщение Feb 28 2007, 15:39
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



Цитата(Мусатов Константин @ Feb 28 2007, 13:58) *
Мне казалось, что битовые операции должны выполняться раньше оперций сравнения.

Не упрощайте - даже "битовые" (полагаю имелись ввиду "логические")имеют меж собой разный приоритет.
И операции "сравнения" (полагаю речь идет об операциях "отношения" и операции "эквивалентность") тоже.
Цитата
if( *ptr & 0x0F == 0x01 )
Сколько я помнил, сначала должна быть выполнена операция &, а потом ==. В отличие, например от

Нет, "эквивалентнось" имеет более высокий приоритет, "нежели логическое И"
Цитата
if( *ptr && 0x0F == 0x01 )
Где сначало должно пройти сравнение, а потом &&.

Просто "условное И" имеет еще много более низкий приоритет, нежели "=="
Цитата
Я решил этот вопрос скобками

И не жалейте скобок и впредь!


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post



Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 22nd August 2025 - 18:58
Рейтинг@Mail.ru


Страница сгенерированна за 0.01368 секунд с 7
ELECTRONIX ©2004-2016