Sari la conținut
ELFORUM - Forumul electronistilor

Indicator nivel apa


Alex vw

Postări Recomandate

  • Răspunsuri 67
  • Creat
  • Ultimul Răspuns

Top autori în acest subiect

  • Liviu M

    8

  • mihai 7

    8

  • Mircea

    6

  • Alex vw

    6

Top autori în acest subiect

Imagini postate

Pai nu pui si if-ul, pui direct:

PORTA.1 = (var <= 60)

Habar n-am daca compileaza, da' cam asa ar fi scrierea in Basic echivalenta cu ce a pus tizu' in C/C++.

Link spre comentariu

Compileaza!

 

Si pe asta:

PORTA.1 = ((var <= 60) or (var > 50))

 

Cum inveti cate ceva in fiecare zi...

Editat de Mircea
Link spre comentariu

Intrebarea era daca si cum face conversia bool -> int. In C/C++ false -> 0, true ->1.

Mai departe, daca conversia e ce trebuie, orice expresie evalueaza in true/false e acceptata.

Link spre comentariu

În C/C++ boolean true este orice valoare afară de zero, care este false.

Deci poţi scrie if(value)   dacă value are orice valoare non-zero se consideră true.

Link spre comentariu

Da, clar, da' aici era vorba de operatia inversa - renunti la if si folosesti valoarea logica a expresiei din if pentru a schimba starea unui pin.

Asta are sens numai daca false e translatat in 0 si true in 1, ca daca true e 10 (sa zicem), nu mai merge, PORTA.1 = 10 nu prea face ce te-ai astepta.

In C false e evaluat la 0, true la 1. Testat :) :


int main(void){
   
    int nr = 1<2;

    printf("True = %d\n", nr);   
    
    nr = 1>2;
    printf("False = %d\n", nr);
}

*************+
      
liviu@g510Lin:~/testeC> ./bool2int.o 
True = 1
False = 0
liviu@g510Lin:~/testeC> 

 

Editat de Liviu M
Link spre comentariu

Așa e, dar booleanul ăsta are și el o reprezentare. În C e sigur ca true e reprezentat prin 1, false prin 0. 

Cu alte cuvinte, când zici PORTA.1 = true, zici de fapt PORTA.1 = 1, ceea ce e perfect valid, așa că poți "abuza" reprezentarea asta pentru variante elegante de scriere a codului. 

 

Link spre comentariu
Acum 8 ore, Mircea a spus:

Poate nu inteleg eu bine, dar rezultatul unei comparatii nu poate fii decat boolean.

Funcţie de aplicaţie comparaţia poate avea şi 3 stări. De ex. int result = a < b ? -1 : a > b ? 1 : 0; 

Însă în cazul unui port digital e clar că nu pot fi decât 2 stări, 0 şi 1.

Editat de mihaicozac
Link spre comentariu

Sorry Mihai, da' ce ai scris tu nu e o comparație, sunt "doo în una". Fiecare din cele doo evaluează în true/false. 

Iar cele trei stări ale tale nu sunt rezultatul unei operații logice, ci alocări de valori unei variabile în funcție de rezultatele a două operații logice, nu a unei singure operații. 

Link spre comentariu

Pentru a trece mai repede mai departe...
Limbajul C nu stie de tipul boolean (true, false).
Pentru a putea sa scriem mai inteligibil un program, sunt definite si utilizate de compilatoare:
#define true 1
#define false 0

Invers, ce este zero este false. Restul este true.

Adica, codul rezultat va utiliza tot un integer (8, 16... 64 biti functie de arhitectura) pentru true/false.






 

Editat de Vizitator
Link spre comentariu

Știu că seamănă a despicat firul, da' nu e vorba neapărat de cum sunt definite true sau false, e vorba ce pune compilatorul pe post de rezultat în cazul unei operații logice. În exemplul tău inițial n-ai scris nicăieri nici true, nici false, și totuși funcționează. 

 

Link spre comentariu
55 minutes ago, Liviu M said:

În exemplul tău inițial n-ai scris nicăieri nici true, nici false, și totuși funcționează.

Deoarece, in limbajul C , true si false nu există.
Rezultatul unei comparatii (memorat intr-un registru al uC) este zero sau non zero. Un numar.
Din aceasta cauza merge scris ceva de genul:
PORTX.PIN7=0; (pinul trece la masa)
Sau
PORTX.PIN7=radical(14);  (pinul trece la plus)

LE: in loc de PORTX.PIN7=0; se poate scrie PORTX.PIN7=(1==2);  // tot aia este.
Sau PORTX.PIN7=(1+2==5);

 

Editat de Vizitator
Link spre comentariu

Creează un cont sau autentifică-te pentru a adăuga comentariu

Trebuie să fi un membru pentru a putea lăsa un comentariu.

Creează un cont

Înregistrează-te pentru un nou cont în comunitatea nostră. Este simplu!

Înregistrează un nou cont

Autentificare

Ai deja un cont? Autentifică-te aici.

Autentifică-te acum



×
×
  • Creează nouă...

Informații Importante

Am plasat cookie-uri pe dispozitivul tău pentru a îmbunătății navigarea pe acest site. Poți modifica setările cookie, altfel considerăm că ești de acord să continui.Termeni de Utilizare si Ghidări