2012-01-19 1 views
0

В унаследованном коде, я столкнулся следующее выражение:комплексов, если условие

if (!m_bMsOcs && bChannelData || m_bMsOcs && !bStunType) 

Я думаю, предполагаемое состояние было

if ((!m_bMsOcs && bChannelData) || (m_bMsOcs && !bStunType)) 

Я не уверен. Как должно выполняться исходное условное выражение? Пожалуйста помоги.

+0

Эти два выражения эквивалентны. В чем проблема с первым? Что это не в скобках в обороте? Что это не с отступом? –

+3

Я думаю, что было бы быстрее проверить его самостоятельно, чем создать новый поток. Существует даже онлайн-компилятор для C++. http://ideone.com/ – CyberGuy

+1

Оператор '&&' имеет более высокий приоритет, чем '||', поэтому ваше предположение эквивалентно исходному выражению. –

ответ

3

precedence логических операторов:

! > && > || 

так что ваша догадка верна.

1

Это вопрос приоритета оператора. Скобки имеют приоритет, а затем ваши логические. Поскольку & & имеет больший приоритет, чем ||, вы правы в своих предположениях.

3
if (((!m_bMsOcs) && bChannelData) || (m_bMsOcs && (!bStunType))) 

Оператор предшествования является !>&&>||

1

Логическое and имеют более высокий приоритет, чем or: link

Так вы правы насчет логики.

0

Ваш собственный ответ правильный :)

Если (это и что) или (это и что)

Так что, если любой из НСРА правильно он оценивает истинный

0

Как уже говорили другие , два выражения эквивалентны из-за правил приоритета C++.

Вот таблица истинности, которые могли бы помочь сделать это ясно, что будет (я согласен, что условное выражение является более сложным, чем хотелось бы, тоже):

m_bMsOcs bChannelData bStunType  Execute? 
======== ============ =========  ======== 
    0    0    0 
    0    0    1 
    0    1    0    Y 
    0    1    1    Y 

    1    0    0    Y 
    1    0    1 
    1    1    0    Y 
    1    1    1 

Обратите внимание, что 1 и 0 в таблице просто представляйте значения true/false (т. е. переменные не должны иметь значение 1 - любое ненулевое значение будет рассматриваться как 1). Я просто считаю таблицу более читаемой, используя 0/1 вместо T/F.

+0

Эта таблица создана приложением? Можете ли вы назвать имя этого приложения? – CyberGuy

+0

@Michal: Я создал таблицу вручную. –

 Смежные вопросы

  • Нет связанных вопросов^_^