|
|
|
![]() |
|
Strumenti |
![]() |
#1 |
Member
Iscritto dal: Jul 2009
Messaggi: 83
|
[C] If senza operatori relazionali : come viene valutato ?
Salve a tutti
vorrei capire l'esatto significato di espressioni come questa : if (x%4/2) b=1;else b=0; con x che varia da 0 a 7 in base ad un ciclo for che ometto. Mi interessa cioè capire il reale significato della condizione dell'if : quando non ci sono operatori relazionali come < o >,la parentesi tonda che contiene la condizione dell'if,come viene valutata ? E' come se io scrivessi "se (x%4/2) è vera,cioè il risultato di questa espressione diverso da zero" ? Oppure ha un significato diverso ? Spero in una vostra veloce risposta ![]() |
![]() |
![]() |
![]() |
#2 |
Senior Member
Iscritto dal: Mar 2008
Messaggi: 401
|
Se il risultato della divisione tra x e 4/2 è vero (cioè non è zero), allora b è uguale a 1, altrimenti b diventa uguale a 0.
|
![]() |
![]() |
![]() |
#3 |
Senior Member
Iscritto dal: Aug 2005
Messaggi: 579
|
Stai lavorando con logaritmi discreti o simili?
Comunque quell'espressione ha poco senso perchè x è in modulo 8: x=0; x%4/2=0 if falso=>b=0 x=1; x%4/2=0,5 if vero=>b=1 x=2; x%4/2=1 if vero=>b=1 x=3; x%4/2=1,5 if vero=>b=1 x=4; x%4/2=0 if falso => b = 0 x=5; x%4/2=0,5 if vero=>b=1 x=6; x%4/2=1 if vero=>b=1 x=7; x%4/2=1,5 if vero=>b=1 Il che è equivalente a fare: if(x == 0 || x == 4) b = 0; else b = 1; oppure b= x == 0 || x == 4 ? 0 : 1; Istruzioni che computazionalmente sono decisamente più leggere, fermo restando che il modulo di x sia fisso. Ultima modifica di _Claudio : 26-09-2009 alle 15:11. |
![]() |
![]() |
![]() |
#4 | |||
Member
Iscritto dal: Jul 2009
Messaggi: 83
|
Quote:
...ovviamente senza l'uso del pc e di nessun IDE. Bisogna quindi fare la tabella di verità per le variabili a,b,c,x e per l'espressione composita con gli operatori bitwise all'interno della printf. Ciò che non capisco è: nella tabella di verità che tu hai fatto per l'if,l'operatore modulo non dovrebbe operare prima della divisione / ? L'associatività è da sinistra verso destra... Insomma,in poche parole,quando ad esempio scrivi : x=1; x%4/2=0,5 if vero=>b=1 non dovrebbe essere : x=1; x%4=1%4=4 (il resto è 4) ...e poi 4/2=2 quindi if vero e b=1 ? |
|||
![]() |
![]() |
![]() |
#5 |
Senior Member
Iscritto dal: Aug 2005
Messaggi: 579
|
Giustamente, se è un esercizietto capisco che non sia ottimizzato, pensavo stavi leggendo e migliorando del codice. Errore mio.
Dunque 1:4=0,25. Dividendo l'unità in 4 parti (fai un'operazione modulo 4) lo 0,25 corrisponde ad 1/4 pertanto il resto della divisione è 1. Così come 2:4=0,5 che sono 2/4 di unità e il resto è 2. In sostanza quando lavori col resto della divisione devi lavorare coi numeri in modulo come si fa alle elementari piuttosto che lavorare con i numeri in Q o R es. 35/6 alle elementari si scrive come: 35:6 = 5 col resto di 5 perchè 35/6=5,83 ma 0,83periodico (il resto) corrisponde a 5/6 pertanto il modulo è 5. Spero di essere stato abbastanza chiaro, la questione è più facile di come l'ho illustrata io (che mi spiego pessimamente), e sarà ancora più facile se nel tuo percorso di studi avrai la fortuna (perchè di fortuna si tratta) di affrontare la logica, le strutture algebriche e i giochetti con l'aritmetica modulare. L'associatività è a sinistra e comunque se mi ricordo bene % ha precedenza maggiore rispetto a /. |
![]() |
![]() |
![]() |
#6 |
Senior Member
Iscritto dal: Dec 2003
Messaggi: 4907
|
|
![]() |
![]() |
![]() |
#7 |
Senior Member
Iscritto dal: Aug 2005
Messaggi: 579
|
|
![]() |
![]() |
![]() |
Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 22:18.