Author Topic: Оператор OR 4 и более условий, отрабатывает неверно  (Read 3884 times)

0 Members and 1 Guest are viewing this topic.

winwebber

  • Освоившийся
  • **
  • Posts: 46
    • View Profile
Code: [Select]
$i="c"
IF($i="a" or $i="b" or $i="c")
 print("Pass")
ELSE
 print ("Error")
END_IF
Pass
Code: [Select]
$i="d"
IF($i="a" or $i="b" or $i="c" or $i="d")
 print("Pass")
ELSE
 print ("Error")
END_IF
Error
Code: [Select]
$i="c"
IF($i="a" or $i="b" or $i="c" or $i="d")
 print("Pass")
ELSE
 print ("Error")
END_IF
Error

Vint

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

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

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

С символом | всё работает нормально
Code: (clickermann) [Select]
$i="c"
IF($i="a" | $i="b" | $i="c" | $i="d")
    print("Pass")
ELSE
    print ("Error")
END_IF
Quote
18:08:19 Pass


i0

  • Оплот сообщества
  • ****
  • Posts: 353
  • CMann 4.13.014 final, ie, presto, win7 x86, x64
    • View Profile
нужны пояснения. Vint, конечно, гуру, доверяю, но не вкуриваю

dramster

  • Герой форума
  • *****
  • Posts: 1134
    • View Profile
Да не, в 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



С символом | всё работает нормально
Code: (clickermann) [Select]
$i="c"
IF($i="a" | $i="b" | $i="c" | $i="d")
    print("Pass")
ELSE
    print ("Error")
END_IF
Quote
18:08:19 Pass

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

i0

  • Оплот сообщества
  • ****
  • Posts: 353
  • CMann 4.13.014 final, ie, presto, win7 x86, x64
    • View Profile
автора!

winwebber

  • Освоившийся
  • **
  • Posts: 46
    • View Profile
Всем спасибо, символами пойдет )