Автор Тема: Оператор OR 4 и более условий, отрабатывает неверно  (Прочитано 82 раз)

0 Пользователей и 1 Гость просматривают эту тему.

winwebber

  • Зашел в гости
  • *
  • Сообщений: 8
    • Просмотр профиля
$i="c"
IF($i="a" or $i="b" or $i="c")
 print("Pass")
ELSE
 print ("Error")
END_IF
Pass
$i="d"
IF($i="a" or $i="b" or $i="c" or $i="d")
 print("Pass")
ELSE
 print ("Error")
END_IF
Error
$i="c"
IF($i="a" or $i="b" or $i="c" or $i="d")
 print("Pass")
ELSE
 print ("Error")
END_IF
Error

Vint

  • Супермодератор
  • Герой форума
  • *
  • Сообщений: 3225
  • Лечу куда хочу. cman 4.13.014x32, xp32
    • Просмотр профиля
После смены математической внутрянки в версии 4.13.14, логические операторы больше не синонимы. 'or'  не тождественно '|' и т.д.

Думаю and, or, xor стали сугубо битовыми операциями. И использовать их нужно если нужны именно операции с битами.

Логическое И  and; &
Логическое ИЛИ  or; |
Логическое исключающее ИЛИ  xor; ^

С символом | всё работает нормально
Код: Clickermann
  1. $i="c"
  2. IF($i="a" | $i="b" | $i="c" | $i="d")
  3.    print("Pass")
  4. ELSE
  5.    print ("Error")
  6. END_IF
Цитировать
18:08:19 Pass


i0

  • Оплот сообщества
  • ****
  • Сообщений: 358
  • CMann 4.13.014 final, ie, presto, win7 x86, x64
    • Просмотр профиля
нужны пояснения. Vint, конечно, гуру, доверяю, но не вкуриваю

dramster

  • Герой форума
  • *****
  • Сообщений: 786
    • Просмотр профиля
Да не, в 4.12 тоже самое  :-\ .  Максимум в условии можно вписать два раза оператор словом or, and, xor.
print (1 or 1 or 1 and 1 and 1 xor 1 xor 1) выдает число, но если добавить еще один любой оператор, то в ответ 1|1|1&1&1^1^1AND1 или  1|1|1&1&1^1^1XOR1 ...С or прокатывает в данном примере ;D, кароче какието непонятки с ними.

Если писать символами ^ & | , то все норм. Сталкнулся с этим глюком вот тут http://crapware.aidf.org/forum/index.php?topic=4324.msg29688#msg29688



С символом | всё работает нормально
Код: Clickermann
  1. $i="c"
  2. IF($i="a" | $i="b" | $i="c" | $i="d")
  3.    print("Pass")
  4. ELSE
  5.    print ("Error")
  6. END_IF
Цитировать
18:08:19 Pass

В версии 4.12 обязательно писать со скобками (($i="a") | ($i="b") | ($i="c") | ($i="d")), иначе "Error"
« Последнее редактирование: Декабрь 06, 2018, 08:23:12 pm от dramster »

i0

  • Оплот сообщества
  • ****
  • Сообщений: 358
  • CMann 4.13.014 final, ie, presto, win7 x86, x64
    • Просмотр профиля
автора!

winwebber

  • Зашел в гости
  • *
  • Сообщений: 8
    • Просмотр профиля
Всем спасибо, символами пойдет )