Что значит это выражение ?

 

Подскажите пожалуйста какая логика у этого выражения :

a = (b - c) > 0;
Что это значит ? что дает ?  я с таким первый раз в своей практике встречаюсь
 
Разница между Бэ и Цэ кладётся в А. Далее значение А сравнивается с нулём.
 
KimIV:
Разница между Бэ и Цэ кладётся в А. Далее значение А сравнивается с нулём.


Игорь спасибо, только не совсем понятно что дает это "сравнение с нулем".

например в if (a>0) function(); есть функция, а тут получается просто сравнили и забыли ? т.е. больше она нуля или меньше - из этого ничего не следует чтоли ? или я что-то не так понимаю ?

 
KimIV:
Разница между Бэ и Цэ кладётся в А. Далее значение А сравнивается с нулём.

Это точно именно так, или только предположение? Я использую подобные конструкции исходя из того, что работают они не так как Вы сказали. Я пишу тупо как на Делфи, и рассчитываю что MQL работает подобным образом. Один раз уже прокололся с преобразованием типов. :) Теперь еще один прокол? :) Хотя багов я не замечал когда писал такие выражения.

PS
На Делфи сия запись вычисляется следующим образом.
Сначала вычисляется значения правого выражения ( (b-c)>0 ), которое имеет булевский тип.
Потом значение этого выражения присваевается левой части (переменной а в данном примере). Переменная a должна быть булевской.
В приведенном примере переменная а будет true, если b-c>0, иначе -- false.
 
Player_2:

На Делфи сия запись вычисляется следующим образом.
Сначала вычисляется значения правого выражения ( (b-c)>0 ), которое имеет булевский тип.
Потом значение этого выражения присваевается левой части (переменной а в данном примере). Переменная a должна быть булевской.
В приведенном примере переменная а будет true, если b-c>0, иначе -- false.

это больше похоже на правду, спасибо :)
 
Нет, все проще. Находиться разность Б и Ц, затем сравнивается с 0. При типе А bool, А присваевается значение true/false, при типе А int - 1/0.
 

Это оператор присваивания. Слева от знака равенства находится булевая или целая переменная, а справа выражение.

В нынешней реализации mql не предполагается возможность оператора присваивания внутри операции сравнения.

Сия запись на mql вычисляется так, как написал Player_2 .

В зависимости от типа переменной а происходит или не происходит целевое преобразование типа значения в правой части к типу переменной а.

 
Это линейная функция.. Давай весь код функции, подробнее скажем.
 
Loknar:

Подскажите пожалуйста какая логика у этого выражения :

a = (b - c) > 0;
Что это значит ? что дает ? я с таким первый раз в своей практике встречаюсь

Если b>c, то a=true, во всех остальных случаях a=false; 
 
Integer:
Loknar:

Подскажите пожалуйста какая логика у этого выражения :





a = (b - c) > 0;

Что это значит ? что дает ? я с таким первый раз в своей практике
встречаюсь


Если b>c, то a=true, во всех остальных случаях a=false; 
+1
 
Integer:
Loknar:

Подскажите пожалуйста какая логика у этого выражения :

a = (b - c) > 0;
Что это значит ? что дает ? я с таким первый раз в своей практике встречаюсь

Если b>c, то a=true, во всех остальных случаях a=false;


Это правильно только для булевой а.

В общем случае преременная а может иметь любой тип, к которому будет приведено значение выражения в правой части перед присваиванием (произойдёт целевое преобразование типа).

При компиляции этого кода ошибок не возникает:

int init()
   {
   int b = 3;
   int c = 2;
   
        int a1 = (b - c) > 0;
       bool a2 = (b - c) > 0;
     double a3 = (b - c) > 0;
     string a4 = (b - c) > 0;
      color a5 = (b - c) > 0;
   datetime a6 = (b - c) > 0;
 
   Alert("a1 = ", a1);
   Alert("a2 = ", a2);
   Alert("a3 = ", a3);
   Alert("a4 = ", a4);
   Alert("a5 = ", a5);
   Alert("a6 = ", a6);
   return;
   }