Ciao,ci sono casi in un programma scritto nel linguaggio C nei quali la valutazione dell’espressione booleana (e && !e) restituisce il valore 1???
Ciao,ci sono casi in un programma scritto nel linguaggio C nei quali la valutazione dell’espressione booleana (e && !e) restituisce il valore 1???
Debian Sarge 3.01a
Slackware 10.2
Io spererei proprio di no!Originariamente inviato da Fabiuz
Ciao,ci sono casi in un programma scritto nel linguaggio C nei quali la valutazione dell’espressione booleana (e && !e) restituisce il valore 1???
Ciao.
"Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza
Come scusa??? :master: :master:
Praticamente devo dedurre che la risposta è no!!! giusto??
Debian Sarge 3.01a
Slackware 10.2
Vedi tu, te lo dice Boole che (e || !e) ha sempre come risultato false...Originariamente inviato da Fabiuz
Come scusa??? :master: :master:
Praticamente devo dedurre che la risposta è no!!! giusto??
Se proprio non ti fidi, semantica operazionale dell'or in C:
- valuto e, se è vera restituisco true;
- se è falsa, restituisco il valore del secondo membro, in questo caso !e quindi true.
In ogni caso, come vedi, viene restituito true
la paura gioca brutti skerzi...............
VVoVe:
http://www.oilproject.org/ -->La Scuola On-LIne degli smanettoni!
in C una espressione booleana viene valutata False se 0Originariamente inviato da Fabiuz
Ciao,ci sono casi in un programma scritto nel linguaggio C nei quali la valutazione dell’espressione booleana (e && !e) restituisce il valore 1???
Vera per ogni valore diverso da 0 (1, 2, ma anche i valori negativi -1, -2 etc)
ora la tabella di verità dell'and logico && è questa
cioè (a && b) è Vera se e solo se a e b sono entrambe Vere.codice:a | b | (a && b) --|---|---------- F | F | F F | V | F V | F | F V | V | V
nel tuo caso dipende solo dal valore di e, che determina poi !e
e il risultato di quella espressione è sempre Falso.codice:e | !e | (e && !e) --|-----|---------- F | V | F V | F | F
l'or logico invece
basta che o a, o b, o entrambe siano vere per essere vero l'or.codice:a | b | (a && b) --|---|---------- F | F | F F | V | V V | F | V V | V | V
qui è sempre verocodice:e | !e | (e || !e) --|-----|---------- F | V | V V | F | V
Esiste, però, un caso in cui il risultato può sembrare incongruente: ad esempio, la valutazione di questa espressione, non è sempre falsa, come si può credere:
Nel caso in cui la variabile a sia diversa da 0 e da 1, le istruzioni verranno eseguite.codice:int a; if (a != !!a) { ... // Queste istruzioni possono essere eseguite }
Il perchè è semplice: se la variabile a vale, ad esempio, 15 il test viene valutato in questo modo:
Questo accade perchè l'operatore ! agisce in questo modo: il primo rende FALSO il valore 15 (quindi lo mette a 0), poi il secondo lo rimette a vero, ma questa volta diventa 1...codice:if (15 != 1) { ... // e viene eseguito. }
Quando A è diverso da NOT( NOT(A) )
Ciao.
"Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza
Astuto il ragazzo!!Originariamente inviato da LeleFT
codice:int a; if (a != !!a) { ... // Queste istruzioni possono essere eseguite }
Ma senti, sei un programmatore C professionista tu che le sai tutte sul C?!?
Assolutamente no: non sono un programmatore C professionista e non le so affatto tutte, anzi!!!Originariamente inviato da teju
Astuto il ragazzo!!
Ma senti, sei un programmatore C professionista tu che le sai tutte sul C?!?
Solamente che a volte mi diverto a provare delle cosette un po' bizzarre!
Ciao.
"Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza