Cos'è ElectroYou | Login Iscriviti

ElectroYou - la comunità dei professionisti del mondo elettrico

Dubbio su condizione ciclo while

Raccolta di codici sorgenti

Moderatore: Foto UtentePaolino

0
voti

[1] Dubbio su condizione ciclo while

Messaggioda Foto Utentephase » 10 ago 2014, 22:08

Ciao!!
Ho una domanda, probabilmente banale, ma non ho mai usato queste sintassi (che ho trovato in vari codici) e non sono sicuro della loro interpretazione. :oops:

Codice: Seleziona tutto
while ( data & 0x80 ){
    ...
};


oppure

Codice: Seleziona tutto
while ((dato1 & 0x1F ) || ( dato2 & 0x04 ) );


so che & rappresenta un and bit a bit, però così si ottiene un byte (se dado 1 e dato 2 sono byte), cosa vuol dire avere una condizione su un byte? Deve essere 0xFF perché sia verificata (non penso possa essere così perché dato1 & 0x1F non potà mai dare come risultato 0xFF)? E cosa vuol dire fare un or logico tra due byte? :?: Spero di essere stato chiaro ad esporre il problema :?
Avatar utente
Foto Utentephase
50 4
New entry
New entry
 
Messaggi: 82
Iscritto il: 23 apr 2013, 16:28

1
voti

[2] Re: dubbio su condizione ciclo while

Messaggioda Foto UtenteTardoFreak » 10 ago 2014, 22:17

In C qualsiasi condizione viene considerata false se vale 0 e vera se diverso da 0.
In pratica
Codice: Seleziona tutto
while(24) do_something();

Genererà un ciclo infinito poiché 24 è sempre diverso da zero.
La funzione logica or || è diversa dalla funzione bitwise or |. La prima lavora sui bit uno per uno, la seconda solo sui valori dei due operandi che saranno considerati veri se diversi da zero e falsi se uguali a zero.
"La follia sta nel fare sempre la stessa cosa aspettandosi risultati diversi".
"Parla soltanto quando sei sicuro che quello che dirai è più bello del silenzio".
Rispondere è cortesia, ma lasciare l'ultima parola ai cretini è arte.
Avatar utente
Foto UtenteTardoFreak
73,9k 8 12 13
-EY Legend-
-EY Legend-
 
Messaggi: 15754
Iscritto il: 16 dic 2009, 11:10
Località: Torino - 3° pianeta del Sistema Solare

0
voti

[3] Re: Dubbio su condizione ciclo while

Messaggioda Foto Utentephase » 11 ago 2014, 12:21

ok...
Quindi, ad esempio, nella sintassi:
Codice: Seleziona tutto
while ( data & 0x80 ) ...

la condizione sarà verificata ed uscirà dal ciclo quando data assumerà un valore "minore" a 0x8F, quindi con il primo bit pari a 0? :-|
Avatar utente
Foto Utentephase
50 4
New entry
New entry
 
Messaggi: 82
Iscritto il: 23 apr 2013, 16:28

0
voti

[4] Re: Dubbio su condizione ciclo while

Messaggioda Foto Utenteemacar » 11 ago 2014, 14:34

phase ha scritto:ok...
Quindi, ad esempio, nella sintassi:
Codice: Seleziona tutto
while ( data & 0x80 ) ...

la condizione sarà verificata ed uscirà dal ciclo quando data assumerà un valore "minore" a 0x8F, quindi con il primo bit pari a 0? :-|

Ciao,
il while continua finché il valore all'interno della parentesi è uguale ad 1 per cui se vuoi ad esempio che il while continui per valori superiori a 5 ed esca per valori inferiori o uguali a 5 potresti scrivere:
Codice: Seleziona tutto
while (x>5) do_something()

perché, finche x è maggiore di 5, la disuguaglianza è verificata ed il risultato è quindi 1.
Avatar utente
Foto Utenteemacar
156 6
Frequentatore
Frequentatore
 
Messaggi: 145
Iscritto il: 3 dic 2013, 11:02

0
voti

[5] Re: Dubbio su condizione ciclo while

Messaggioda Foto Utentephase » 11 ago 2014, 23:59

Penso che non riesco a spiegarmi bene... :? :?
Allora mi è assolutamente chiaro che il ciclo terminerà quando la condizione non sarà più vera, ossia quando il suo valore logico sarà 0. Il problema della sintassi da me proposta è che la condizione del ciclo è data da un operazione bit a bit la quale darà come risultato un byte (se i due operandi sono byte) e non un bit... Quindi la mia domanda è: la condizione non sarà più soddisfatta ed uscirà dal ciclo quando il risultato dell'operazione varrà 0x00 (mi sono sbagliato nel post iniziale a dire 0xFF)?
Avatar utente
Foto Utentephase
50 4
New entry
New entry
 
Messaggi: 82
Iscritto il: 23 apr 2013, 16:28

2
voti

[6] Re: Dubbio su condizione ciclo while

Messaggioda Foto UtenteTardoFreak » 12 ago 2014, 0:28

SI, uscirà quando il risultato numerico sarà zero.
"La follia sta nel fare sempre la stessa cosa aspettandosi risultati diversi".
"Parla soltanto quando sei sicuro che quello che dirai è più bello del silenzio".
Rispondere è cortesia, ma lasciare l'ultima parola ai cretini è arte.
Avatar utente
Foto UtenteTardoFreak
73,9k 8 12 13
-EY Legend-
-EY Legend-
 
Messaggi: 15754
Iscritto il: 16 dic 2009, 11:10
Località: Torino - 3° pianeta del Sistema Solare

0
voti

[7] Re: Dubbio su condizione ciclo while

Messaggioda Foto Utentephase » 12 ago 2014, 0:34

Grazie mille! :ok:
Avatar utente
Foto Utentephase
50 4
New entry
New entry
 
Messaggi: 82
Iscritto il: 23 apr 2013, 16:28

0
voti

[8] Re: Dubbio su condizione ciclo while

Messaggioda Foto UtenteWALTERmwp » 12 ago 2014, 0:36

Ciao Foto Utentephase, come ti ha scritto @TardoFreak dipende poi dall'operatore che utilizzi.
In questo caso ...
phase ha scritto:CODICE: SELEZIONA TUTTO
while ( data & 0x80 ){
    ...
};
... il ciclo si interrompe se "data" assume valore diverso dall'esadecimale 0x80 (l'altro numero è una costante quindi è sempre tale).
Anche qui ...
phase ha scritto:CODICE: SELEZIONA TUTTO
while ((dato1 & 0x1F ) || ( dato2 & 0x04 ) );
... la condizione (dato1 & 0x1F ) risulterà "vera" se la variabile "dato1" avrà almeno un bit a uno in corrispondenza di un bit, a uno, della costante; la stessa considerazione vale per ( dato2 & 0x04 ).
I due risultati sono poi interpretati come stati logici dove, per il test del "while", vengono considerati "vero" o "falso" e posti in "or" tra loro.

Saluti
W - U.H.F.
Avatar utente
Foto UtenteWALTERmwp
30,2k 4 8 13
G.Master EY
G.Master EY
 
Messaggi: 8982
Iscritto il: 17 lug 2010, 18:42
Località: le 4 del mattino

0
voti

[9] Re: Dubbio su condizione ciclo while

Messaggioda Foto Utentephase » 12 ago 2014, 0:43

WALTERmwp ha scritto:... il ciclo si interrompe se "data" assume valore pari a zero (l'altro numero è una costante quindi è sempre "vera").

Da come ho capito non è necessario che data sia uguale a zero... Se la costante vale 0b10000000, perché il ciclo si interrompa è necessario che data valga ad esempio 0b01111111, o comunque con il primo bit diverso da 0. Sbaglio? :?
Avatar utente
Foto Utentephase
50 4
New entry
New entry
 
Messaggi: 82
Iscritto il: 23 apr 2013, 16:28

0
voti

[10] Re: Dubbio su condizione ciclo while

Messaggioda Foto UtenteWALTERmwp » 12 ago 2014, 0:49

Con l'operatore ( & ) e ( | ) vai a fare un test bit a bit tra i parametri (supponiamo siano due); in tal caso, ad esempio, applicando ( & ) varrebbe questo ...
phase ha scritto:Se la costante vale 0b10000000, perché il ciclo si interrompa è necessario che data valga ad esempio 0b01111111, o comunque con il primo bit diverso da 0.
... proprio perché viene eseguito un test bit a bit.

Con l'operatore ( && ) e ( || ) vai a fare un test logico tra i parametri.

Saluti
W - U.H.F.
Avatar utente
Foto UtenteWALTERmwp
30,2k 4 8 13
G.Master EY
G.Master EY
 
Messaggi: 8982
Iscritto il: 17 lug 2010, 18:42
Località: le 4 del mattino

Prossimo

Torna a Firmware e programmazione

Chi c’è in linea

Visitano il forum: Nessuno e 4 ospiti