Да какая разница, какие приоритеты. Я всегда скобки ставлю и не гружусь этими высокими материями. А вообще да, это действительно странно. Но об этом сами метаквоты и пишут в самом конце справки о приоритетах. Так что первый пример интерпретируется так:
Print(0 && ( 1 || 1 ) && 1); // Возвращает 0 - правильно!
А почему у Вас такой ник? :)
А если бы "0*1+1*1" возвращало бы ноль? Это тоже бы никого не смущало? :)
Внизу справки о приоритетах написано:
"Внимание: приоритет выполнения операций в языке MQL4 несколько отличается от приоритета, принятого в языке Си"
Но если б там внизу было написано: "В языке MQL4 используется наша собственная математика, не совпадающая с общепринятой. Помните! 2+2=5 в MQL4!"
То было бы все понятно.
А так... это дикий баг :)
Это не баг, а фича этого языка, которая меня тоже смутила, если откровенно. Но я на нее ни разу не наталкивался, так как допускал, что лучше заложиться на особенности реализации булевой алгебры в этом языке, и всегда ставил скобки: в булевой алгебре приоритеты не настолько однозначны, как в рихметике. И они относятся не к собственно алгебре, а к ее реализации.
Почему у меня такой ник, не скажу, это мой ноу-хау.
Тем не менее в булевой алгебре приоритеты не настолько однозначны, как в рихметике. И они относятся не к собственно алгебре, а к ее реализации.
После первого ложного высказывания дальнейшая проверка прекращается. По моему так.
Правильно, только это касается только опреатора AND. Раз скобок нет он проверил первый элемент и далбше уже нет нужды. А когда есть еще ИЛИ и есть скобки, то проверяется все выражение. Так кажись.
ARray, я не Математик, а всего лишь Mathemat... Этимологию ника не скажу, хоть на куски меня режь.
Если каждая пятая домохозяйка в нашей стране все же сможет правильно вычислить 2 + 2 * 2, это не дает тебе оснований утверждать, что ее будет волновать результат выражения 0 && 1 || 1 && 1 , так как она даже и не знает, что это такое. Шутка.
ARray, меня такой приоритет тоже смущает, поверь мне, но нисколько мне не мешает. Понимаешь разницу?
Приоритет простой - сначала && потом || потом сравнения в порядке следования. При этом нет разницы над чем &&.
Целые перемножаются побитово, от плавающих берется целая часть и тоже побитово перемножается. 3 && 1 дает 1, 4 && 1 дает 0. :-)))
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
То есть разработчики считают, что вначале выполняется действие сложение, а потом умножение? :)
Опровергается вся теория булевой алгебры... да и вообще математики.
Разработчики, почему так???
МТ4 билд 208