Un risultato davvero sorprendente!!!

 

Codice:

void DebugInfo()
{
   int a=23;
   int s=20;
   int f=1;
   // Исходное условие
   bool r1 = a>= s && a<= f && s<= f || ( a>= s || a<= f) && s> f;
   // Дальше пошли извращения
   bool r2 = a>= s && a<= f && s<= f;
   bool r3 = ( a>= s || a<= f) && s> f;
   bool r4 = r2 || r3;
   // Вывод
   Print ( r1+" "+ r2+" "+ r3+" "+ r4);
   // Результат: 0 0 1 1. А должно быть: 1 0 1 1.
}

Ora una domanda per voi: chi è che fa glitch a me o a MQL4?

Grazie:)

 

Veramente delizioso!


Sembra che si possa fare un po' di soldi in fretta con questo!

 

di cosa non siete soddisfatti?
sì=1, no=0,

a<=f non soddisfa

==risposta giusta

 
Korey >> :

di cosa non siete soddisfatti?
sì=1, no=0,

a<=f non è soddisfattoc

== risposta giusta

Ma fa (a>=s || a<=f) && s>f

 
WWer писал(а) >>

Ma (a>=s || a<=f) && s>f

Allora le parentesi dovrebbero essere

 
Vinin >> :

Avresti dovuto mettere le parentesi

Perché? || ha una priorità maggiore di &&

 
(a>=s || a<=f) - 1 || 0 = 1
(a>=s || a<=f) && s > f - 1 && 1 = 1

In effetti, dovreste metterlo esplicitamente tra parentesi. Ci sono già cascato una volta.

WWer >>:

Зачем? У || большый приоритет чем у &&

quindi specificarlo nel codice, in modo che lo script possa capirlo =)


 
Korey писал(а) >>

di cosa non sei contento?
>> sì=1, no=0,

a<=f non soddisfa

==f è corretto

La risposta è corretta, o è solo una regola molto strana in MQL4, o le operazioni logiche sono eseguite secondo una regola molto strana. Non sembra C/C++ o altro. L'ho anche tradotto in JavaScript:

var a=23;
var s=20;
var f=1;
// Исходное условие
var r1 = a>=s && a<=f && s<=f || (a>=s || a<=f) && s>f;
// Дальше пошли извращения
var r2 = a>=s && a<=f && s<=f;
var r3 = (a>=s || a<=f) && s>f;
var r4 = r2 || r3;
// Вывод
WScript.Echo(String(r1)+" "+String(r2)+" "+String(r3)+" "+String(r4));
Risultato: vero falso vero vero vero vero
 
WWer писал(а) >>

Perché? || ha una priorità maggiore di &&

Al contrario, && ha una priorità più alta di |||.

 
nen >> :

Al contrario, && ha una priorità più alta di ||

IN MQL4 ? Possibile, ma dovrebbe esserlo.

 

Niente affatto! La "o" (||) ha la precedenza qui - senza ambiguità!

Se non ci sono parentesi, || viene eseguito per primo, poi &&

Ecco perché le parentesi devono essere messe nei posti appropriati.

Motivazione: