Ув. эксперты, имеется вот такая строчка : if(!pt->m_bSync || FirstLock.IsLocked() ) Объясните пожалуйста, какие операции выполнятся в первую очередь - логическое "ИЛИ" или логическое отрицание ? А то я что-то не могу разобрать по таблице приоритетов операций :( Спасибо.
Здравствуйте, Jens! Сначала - логическое отрицание. Смело можно переписать как: if ((!pt->m_bSync) || FirstLock.IsLocked()) Ответ отправлен: 04.08.2003, 15:00 Отправитель: Bobs Отвечает Marouder
Добрый день, Jens! Сначала отрицание, естественно. И если условие с отрицанием верно, то логическое "ИЛИ" вообще не будет выполняться. Ответ отправлен: 05.08.2003, 02:56 Отправитель: Marouder Отвечает Avl2k
Здравствуйте, Jens! Приоритет у логического отрицания выше, чем у логического "или", следовательно, отрицание вычисляется раньше. Кстати, если !pt->m_bSync - единица, то FirstLock.IsLocked() вообще не будет вычисляться - т.н. короткая схема вычисления выражений. С уважением, Avl2k. Ответ отправлен: 04.08.2003, 15:36 Отправитель: Avl2k Отвечает Vdr
Добрый день, Jens! if(!pt->m_bSync || FirstLock.IsLocked() ) если что-то не понятно раставим скобки: if((!pt->m_bSync)||(FirstLock.IsLocked())) операция отрицания (!) имеет один из самых высоких приоритетов, а опрерация или(||)один из самых низких Ответ отправлен: 04.08.2003, 15:19 Отправитель: Vdr Отвечает RedFox
Доброе время суток, Jens! Так как операция отрицания унарная, то она имеет больший приоритет, чем операция логического "ИЛИ" и проверка на нулевое значение pt->m_bSync будет произведена первой. Хочется отметить, что логические операции в C вычисляют минимальное число операндов, необходимых для определения результата выражения. Т.о. если значение pt->m_bSync будет равно нулю (т.е. первый операнд вернет истину), то второй операнд не будет вычисляться (и вызов функции не произойдет). Ответ отправлен: 04.08.2003, 18:21 Отправитель: RedFox
Форма отправки вопроса
Внимание!
Мы рекомендуем открывать рассылку в программе Internet Explorer 5.0+
или отправлять вопросы с сайта по адресу:
http://rusfaq.ru/cgi-bin/Message.cgi.