Чем отличаются «не» и «ложь» - PullRequest
1 голос
/ 21 февраля 2012

В чем разница между

if mi.(j) = false && m.(j).(i) = false

и

if not (mi.(j) && m.(j).(i))

Потому что я думаю, что это имеет то же значение, но когда я запускаю код, он дает мне другой ответ.

Ответы [ 4 ]

5 голосов
/ 21 февраля 2012
if mi.(j) = false && m.(j).(i) = false

фактически совпадает с

if not mi.(j) && not m.(j).(i)

, что по законам Де Моргана эквивалентно

if not (mi.(j) || m.(j).(i))
5 голосов
/ 21 февраля 2012

Скажите, mi.(j) - это истина, а m.(j).(i) - это ложь.

mi.(j) = false && m.(j).(i) = false
true = false && false = false
false && true
false

not (mi.(j) && m.(j).(i))
not (true && false)
not (false)
true

Вы, вероятно, хотите not (mi.(j) || m.(j).(i)). Это в основном пример законов Деморгана.

0 голосов
/ 21 февраля 2012

Чтобы ответить на основной вопрос, нет разницы между x=false и not x. Эти два выражения всегда будут всегда давать один и тот же результат. Как уже отмечали другие, настоящая проблема с двумя битами кода - это неспособность понять, что вы не использовали законы Деморгана. Первая версия эквивалентна

(not m.(j)) && (not m.(j).(i))

что не совпадает с

not ( m.(j) && m.(j).(i) )

Я считаю, что лучший способ запомнить такие вещи - подумать о предложениях реального мира. Если бы я сказал: «Я хочу день, когда не идет дождь и не идет снег». Это отличается от высказывания «Я хочу день, когда не будет ни дождя, ни снега». Предложение, которое фактически эквивалентно первому: «Я хочу день, когда не будет ни дождя, ни снега». (т.е. нет (идет дождь или идет снег)). Итак, вы должны помнить об этом и с логикой.

Вот почему эквивалентом первого утверждения является

not ( m.(j) || m.(j).(i) )
0 голосов
/ 21 февраля 2012
if mi.(j) = false && m.(j).(i) = false  not equal to  if not (mi.(j) && m.(j).(i))

для

if not (mi.(j) && m.(j).(i)) 

Вы противоположны результату

  (mi.(j) && m.(j).(i))

«Не» не означает ложь, но означает противоположность утверждению.

Надеюсь, поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...