johnsilver
Просветленный
(22652)
10 лет назад
ты что получить то хочешь? напиши условие нормально.
это условие верное.
если все переменные равны 0, то будет фальш
если хотя бы 1 больше 0, то истина
если 2 больше 0 - фальш
если все 3, то истина.
0 0 0=False
0 0 1=True
0 1 0=True
1 0 0=True
0 1 1=False
1 0 1=False
1 1 0=False
1 1 1=True
Дмитрий Царь
Мудрец
(11461)
10 лет назад
XOR возвращает FALSE если значения равны (например TRUE xor TRUE = FALSE; FALSE xor FALSE = FALSE). Если значение НЕ равны, вернёт TRUE (TRUE xor FALSE = TRUE; FALSE xor TRUE = TRUE).
В твоём случае, с тремя условиями, он поделит условия на части. Оригинал выражения:
(a>0) xor (b>0) xor (c>0)
Предположим, что дали a, b и c булеановые значения (если a>0 то TRUE...). То есть выйдет такое:
a xor b xor c
Теперь посмотрим на выражение со значениями:
TRUE xor TRUE xor TRUE
Языки не могут выполнять сравнение сразу по всем критериям, они идут по порядку:
(a xor b) xor c
Здесь сначала выполняется проверка a xor b, а после чего, полученное значение сравнивается как (a xor b) xor c.
А теперь вернёмся к началу сообщения и посмотрим на принцип работы XOR.
У тебя есть TRUE xor TRUE xor TRUE. А если точнее, у тебя есть (TRUE xor TRUE) xor TRUE. Разберём по частям. Приравняю к x, чтоб было понятнее.
x:=(TRUE xor TRUE); // вернёт FALSE, т. к. значения одинаковы
x xor TRUE // со значениями выходит FALSE xor TRUE, а так как значения разные, возвращает TRUE
В итоге, если у тебя все три условия TRUE, у тебя и выйдет TRUE. Если же хоть одно условие равно FALSE, то вернёт FALSE. Если два условия равны FALSE, вернёт TRUE. Если три условия равны FALSE, вернёт FALSE.