Булевые операции и приоритеты - страница 2

 
Не надо путать побитовое И (&) и логическое И (&&)! Это разные вещи!
 

Я не путаю, я вам рассказываю как на практике это работает - && выполняется самой первой!!!

PS

Cейчас проверил (4 && 1) = 1 значит все таки не побитово. Все немного сложнее (4>0) && (1>0) = 1 && 1 = 1

 
2PSmith: Прочитайте Очень Внимательно первое сообщение данного топика.
 
ARray:
Print(0 && 1 || 1 && 1); // Возвращает 0 - неправильно
Print((0 && 1) || (1 && 1)); // Возвращает 1
Непонятно, почему у логического ИЛИ приоритет выше, чем у И???

То есть разработчики считают, что вначале выполняется действие сложение, а потом умножение? :)
Опровергается вся теория булевой алгебры... да и вообще математики.

Разработчики, почему так???

МТ4 билд 208


Нда не получается. Может не приоритет или выше, может просто обратный порядок, или какие-то глюки с преобразованием типов?

Хотя False && True || True && True тоже дают 0.

Пару раз натыкался и в старых билдах на непонятки с приоритетом в выражениях типа a > b && b < c, но вникать не стал, просто теперь всегда ставлю скобки.

Что показало исследование:

0 && 1 || 1 && 1 = 0

1 && 0 || 1 && 1 = 1

1 && 1 || 0 && 1 = 1

1 && 1 || 1 && 0 = 0

Похоже все таки приоритет нарушается.

 
PSmith:

Что показало исследование:

0 && 1 || 1 && 1 = 0

1 && 0 || 1 && 1 = 1

1 && 1 || 0 && 1 = 1

1 && 1 || 1 && 0 = 0

Похоже все таки приоритет нарушается.

Не нарушается - https://docs.mql4.com/ru/basis/operations/rules

||     Логическая операция ИЛИ                  Слева направо
&&     Логическая операция И                    Слева направо

"Для изменения порядка выполнения операций применяются круглые скобки, которые имеют высший приоритет."
"Внимание: приоритет выполнения операций в языке MQL4 несколько отличается от приоритета, принятого в языке Си."
 
Vinin:
После первого ложного высказывания дальнейшая проверка прекращается. По моему так.
Не так - https://docs.mql4.com/ru/basis/operations/bool
'Логические выражения вычисляются полностью, т.е., к ним не применяется схема так называемой "короткой оценки".'
 

Уважаемые разработчики MQL4, исправьте, пожалуйста, эту ошибку, допущенную кем то уже давно, сделав логическую операцию "ИЛИ" выше "И". Как я полагаю, вы с этим смирились, чтобы не сломались ранее написанные советники. Зря вы так думаете, все знающие программисты и математики программировавшие в MQL4 и наткнувшись на такую ошибку лучше поставят скобки, чтобы сделать "И" приоритетнее, чем допустят нарушение общепринятых правил. Поэтому эти советники останутся работающими. Они в недоумении, а некоторые могут посмеяться в некомпетентности разработчиков.

Можно это исправить в MQL5, чтобы новые советники писались по новым правильным правилам.

Хотя может быть вы усмотрели какое то преимущество в этом и пошли на такое нововведение? Тогда поделитесь в чем оно заключается.

 
Myster >>:

Можно это исправить в MQL5, чтобы новые советники писались по новым правильным правилам.

Тогда при переносе кода с mql4 на этой почве будет допущена масса ошибок (наверное)


сам поначалу наступал на эти грабли. потом свыкся.

 
Слава уже говорил, что в MQL5 приоритеты логических операций реализованы как в С++.
 
Rosh >>:
Слава уже говорил, что в MQL5 приоритеты логических операций реализованы как в С++.

Интересно а зачем вобще нужен mql? почемуб не сделать библиотеку и пусть каждый пишет кому на чем удобно? Гораздо удобней чем писать програму на mql которая использует библиотеку написанную на c++ да еще и глючит, у меня вылетает когда одновременно несколько экспертов шлют котировки в длл.