Чтобы ответить на основной вопрос, нет разницы между x=false
и not x
. Эти два выражения всегда будут всегда давать один и тот же результат. Как уже отмечали другие, настоящая проблема с двумя битами кода - это неспособность понять, что вы не использовали законы Деморгана. Первая версия эквивалентна
(not m.(j)) && (not m.(j).(i))
что не совпадает с
not ( m.(j) && m.(j).(i) )
Я считаю, что лучший способ запомнить такие вещи - подумать о предложениях реального мира. Если бы я сказал: «Я хочу день, когда не идет дождь и не идет снег». Это отличается от высказывания «Я хочу день, когда не будет ни дождя, ни снега». Предложение, которое фактически эквивалентно первому: «Я хочу день, когда не будет ни дождя, ни снега». (т.е. нет (идет дождь или идет снег)). Итак, вы должны помнить об этом и с логикой.
Вот почему эквивалентом первого утверждения является
not ( m.(j) || m.(j).(i) )