Mircea Postat Iulie 3, 2021 Partajează Postat Iulie 3, 2021 Elegant, jos palaria! Arduino asta e prietenos rau de tot. Link spre comentariu
Liviu M Postat Iulie 3, 2021 Partajează Postat Iulie 3, 2021 Cred ca fix la fel ar fi și în basic - fals = 0, adevărat = 1. Link spre comentariu
Mircea Postat Iulie 3, 2021 Partajează Postat Iulie 3, 2021 PORTA.1 = 1 If var <= 60 n-ar merge in Mikrobasic. Mikrobasic cere: if var <= 60 then PORTA.1 = 0 end if Link spre comentariu
Liviu M Postat Iulie 3, 2021 Partajează Postat Iulie 3, 2021 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
Mircea Postat Iulie 3, 2021 Partajează Postat Iulie 3, 2021 (editat) Compileaza! Si pe asta: PORTA.1 = ((var <= 60) or (var > 50)) Cum inveti cate ceva in fiecare zi... Editat Iulie 3, 2021 de Mircea Link spre comentariu
Liviu M Postat Iulie 3, 2021 Partajează Postat Iulie 3, 2021 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
mihaicozac Postat Iulie 3, 2021 Partajează Postat Iulie 3, 2021 Î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
Liviu M Postat Iulie 3, 2021 Partajează Postat Iulie 3, 2021 (editat) 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 Iulie 3, 2021 de Liviu M Link spre comentariu
Mircea Postat Iulie 3, 2021 Partajează Postat Iulie 3, 2021 Poate nu inteleg eu bine, dar rezultatul unei comparatii nu poate fii decat boolean. Link spre comentariu
Liviu M Postat Iulie 3, 2021 Partajează Postat Iulie 3, 2021 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
mihaicozac Postat Iulie 4, 2021 Partajează Postat Iulie 4, 2021 (editat) 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 Iulie 4, 2021 de mihaicozac Link spre comentariu
Liviu M Postat Iulie 4, 2021 Partajează Postat Iulie 4, 2021 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
Vizitator Postat Iulie 4, 2021 Partajează Postat Iulie 4, 2021 (editat) 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 Iulie 4, 2021 de Vizitator Link spre comentariu
Liviu M Postat Iulie 4, 2021 Partajează Postat Iulie 4, 2021 Ș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
Vizitator Postat Iulie 4, 2021 Partajează Postat Iulie 4, 2021 (editat) 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 Iulie 4, 2021 de Vizitator Link spre comentariu
Postări Recomandate
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 contAutentificare
Ai deja un cont? Autentifică-te aici.
Autentifică-te acum