HACKING 120% {Hacking, programmazione, computer & molto altro}

[Supporto] OR (||) e AND(&&) di corto circuito

« Older   Newer »
  Share  
Nessuno
icon14  view post Posted on 27/2/2014, 18:40     +1   -1




Ciao :)
Come da titolo vorrei dei chiarimenti su OR e AND di corto circuito, il libro riporta questo esempio:

if (denom != 0 && num / denom > 10)

e dopo dice:

"poiché si utilizza la forma di corto circuito di AND, non esiste il rischio di causare un'eccezione di runtime quando denom è zero. Se si scrivesse la stessa riga di codice con la versione singola di AND , verrebbero valutati entrambi gli operandi e quando denom è zero verrebbe generata un'eccezione di runtime."

e di OR di corto circuito non fa nessun esempio. :wacko:
potreste spiegarmi meglio come funzionano? AND e OR logici ho capito come funzionano(come i bit solo che invece di 1 e 0 si usa TRUE o FALSE) ma AND e OR di corto circuito non riesco proprio a capirli :(
Grazie in anticipo :D
 
Top
RootkitNeo
view post Posted on 1/3/2014, 00:36     +1   -1




CITAZIONE (Nessuno @ 27/2/2014, 18:40) 
Ciao :)
Come da titolo vorrei dei chiarimenti su OR e AND di corto circuito, il libro riporta questo esempio:

if (denom != 0 && num / denom > 10)

e dopo dice:

"poiché si utilizza la forma di corto circuito di AND, non esiste il rischio di causare un'eccezione di runtime quando denom è zero. Se si scrivesse la stessa riga di codice con la versione singola di AND , verrebbero valutati entrambi gli operandi e quando denom è zero verrebbe generata un'eccezione di runtime."

e di OR di corto circuito non fa nessun esempio. :wacko:
potreste spiegarmi meglio come funzionano? AND e OR logici ho capito come funzionano(come i bit solo che invece di 1 e 0 si usa TRUE o FALSE) ma AND e OR di corto circuito non riesco proprio a capirli :(
Grazie in anticipo :D

In pratica si tratta sempre di AND ed OR. E' abbastanza semplice concettualmente: applicando gli operatori logici (& e |) a valori boolean ottieni true o false e l'espressione viene valutata tenendo conto di entrambe le due condizioni, in pratica nel caso mostrato sopra viene calcolata sia il "denom!=0" sia la divisione, e questo genera un eccezione (in quanto c'è una divisione per 0). Se usi invece && viene valutata solo l'espressione di sinistra, e se questa non passa il controllo non viene valutata l'altra, quindi nel tuo caso li sopra non hai alcuna eccezione.

Il 99% delle volte troverai && e ||. Immagina di dover controllare due password ed entrambe devono essere vere, farai:
CODICE
if(pwd1 == 123456789 && pwd1==987654321) {


Grazie al doppio &&, se la prima (pwd1) è false, l'altra non viene nemmeno valutata (visto che devono essere true entrambe, se già la prima è falsa, controllare l'altra non serve nemmeno).
 
Top
Nessuno
view post Posted on 1/3/2014, 07:50     +1   -1




Ahhh ho capito :D quindi anche con OR se una è falsa non viene valutata l'altra? In pratica fanno la stessa cosa.
Grazie mille ora ho capito :)
 
Top
RootkitNeo
view post Posted on 1/3/2014, 14:18     +1   -1




Si in pratica tra && e || non cambia nulla; intendo dire che nel caso di && se la prima è falsa l'altra non viene valutata, ma con || le cose sono diverse, in quanto ad OR è sufficiente che UNA sia vera, quindi l'altra deve essere valutata; di conseguenza, se usi || e la prima è vera, l'altra non viene valutata. :)

Nelle espressioni booleane userai sempre || e && comunque, non mi è mai accaduto di utilizzare un singolo OR o un singolo AND.
 
Top
Nessuno
view post Posted on 1/3/2014, 14:41     +1   -1




Grazie :) sempre chiaro e preciso :D
 
Top
RootkitNeo
view post Posted on 1/3/2014, 15:16     +1   -1




Di nulla. :)

Non accade nemmeno troppo spesso utilizzare gli operatori bitwise in realtà, servono in determinate condizioni (tipicamente se hai a che fare con immagini, colori, o al massimo crittografia; poi ci sono magari casi particolari dove devi usarli o ti rendi conto che veloizzino le cose magari).
Poi affronterai anche gli shift tra 1 o 2 pagine probabilmente.
 
Top
Nessuno
view post Posted on 1/3/2014, 15:18     +1   -1




Grazie di nuovo :) credo che avrò a che fare con molte immagini xD peccato che la scuola ultimamente mi stressa troppo altrimenti sarei arrivato molto più avanti T.T
 
Top
RootkitNeo
view post Posted on 1/3/2014, 15:41     +1   +1   -1




In quel caso allora sono comodi per estrarre ad esempio i colori. Un esempio è inserire in una posizione dell'array i 3 colori RGB, usando appunto gli operatori bitwise (tratto da un mio source che posterò dopo):
CODICE
pixels[k++] = (255 << 24) | (r << 16) | (g << 8) | b;


Un altra applicazione di AND è in ambito reti.
 
Top
Nessuno
view post Posted on 1/3/2014, 17:37     +1   -1




CITAZIONE (RootkitNeo @ 1/3/2014, 15:41) 
In quel caso allora sono comodi per estrarre ad esempio i colori. Un esempio è inserire in una posizione dell'array i 3 colori RGB, usando appunto gli operatori bitwise (tratto da un mio source che posterò dopo):
CODICE
pixels[k++] = (255 << 24) | (r << 16) | (g << 8) | b;


Un altra applicazione di AND è in ambito reti.

Grazie Root! :D
 
Top
8 replies since 27/2/2014, 18:40   75 views
  Share