2013-05-15 3 views
0

Может ли кто-нибудь объяснить, почему эти два утверждения не равны?Если нет (a, а не b) и если (не a и b)

if not(a and not b): 
// do some stuff 


if (not a and b): 
// do some stuff 

Я попытался сделать мою программу более понятной, изменив первое утверждение на второе, но это не сработает. Я не совсем понимаю, почему.

+0

две вещи: 1) Убедитесь, что старшинство разные логические операторы - это то, что вы думаете (включая левый и правый ассоциативный). 2) Если вы когда-либо ДЕЙСТВИТЕЛЬНО запутались, сделайте таблицу истинности (результат для всех возможных входов). Проверьте и сравните. – Patashu

+0

Вы забыли полностью отменить, легче написать программу для итерации через таблицы истинности. –

ответ

5

Вы должны смотреть в Thereom Де Моргана, половина из которых является (а):

not(p and q) -> not(p) or not(q) 

с точки зрения того, как это относится к вам г ситуация, просто заменить p с a и q с not(b):

not(a and not b) -> not(a) or not(not(b)) 
       -> not(a) or b 

(а) Другая половина:

not(p or q) -> not(p) and not(q) 
1

if not(a and not b) такое же, как if (not a) or b, а не то, что вы написали.

+0

Как вы это получили? Есть ли правило для переписывания? –

+1

@ 9-бит - да, это закон Де Моргана - http://en.wikipedia.org/wiki/De_Morgan's_laws – shf301

1

Кроме того, необходимо перевернуть «и» в «или» из-за De Morgan's law

if not(a and not b) 

становится

if (not a or b) 
+0

Вы можете добавить свой ответ 'из-за закона morgan' – Bill

+1

@ bill done, cheers – Craig

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