Инвертировать логические условия или условные выражения - PullRequest
0 голосов
/ 05 мая 2018

Я хочу вручную инвертировать логическое условие.

Допустим, у нас есть это:

$a = true;
$b = false;

if (!$a or $b) {
    echo 'true';
}

if (!(!$a or $b)) { //I want to solve !(!$a or $b) to a form without ()
    echo 'true 2';
}

Каковы правила?

Ответы [ 2 ]

0 голосов
/ 05 мая 2018

Согласно законам де Моргана :

!(A and B) == !A or !B
!(A or B)  == !A and !B

Поэтому

!(!$a or $b) == !!$a and !$b == $a and !$b

Вы также можете составить оценочную таблицу:

$a     $b     !(!$a or $b)  $a and !$b
true   true   false         false
true   false  true          true
false  true   false         false
false  true   false         false

Примечание:

Осторожнее с and / or, когда у вас есть такие задания, как $val = true and false;, ср. 'AND' vs '&&' в качестве оператора

0 голосов
/ 05 мая 2018

Так скажем

!(!$a or $b) === true совпадает с !$a or $b === false.

Таким образом, !$a or $b должно быть ложным, что означает, что !$a и $b должны быть оба ложными, что, в свою очередь, означает, что $a должно быть истинным, а $b должно быть ложным.

В конце это !(!$a or $b) эквивалентно $a and !$b.

$a  $b  !(!$a or $b)   $a and !$b
T   T   F               F
T   F   T               T
F   T   F               F
F   F   F               F

Мы также можем доказать это, используя булеву алгебру и Теорема де Моргана

¬ (¬A∨B) = ¬ (¬A) ∧¬B = A∧¬B

...