Автокликер Clickermann :: Форум

Основной раздел => Ошибки => Topic started by: winwebber on December 06, 2018, 05:44:36 PM

Title: Оператор OR 4 и более условий, отрабатывает неверно
Post by: winwebber on December 06, 2018, 05:44:36 PM
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
Title: Re: Оператор OR 4 и более условий, отрабатывает неверно
Post by: Vint on December 06, 2018, 06:13:20 PM
После смены математической внутрянки в версии 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
Title: Re: Оператор OR 4 и более условий, отрабатывает неверно
Post by: i0 on December 06, 2018, 07:57:47 PM
нужны пояснения. Vint, конечно, гуру, доверяю, но не вкуриваю
Title: Re: Оператор OR 4 и более условий, отрабатывает неверно
Post by: dramster on December 06, 2018, 08:20:04 PM
Да не, в 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"
Title: Re: Оператор OR 4 и более условий, отрабатывает неверно
Post by: i0 on December 06, 2018, 09:58:25 PM
автора!
Title: Re: Оператор OR 4 и более условий, отрабатывает неверно
Post by: winwebber on December 07, 2018, 05:15:27 PM
Всем спасибо, символами пойдет )