PDA

Visualizza la versione completa : [C] Operatore logico "!" e priorità operatori


toni00c
05-02-2011, 13:26
ciao

sto simulando un esercizio di informatica ;

il problema è che arrivato a un certo punto del codice non so esattamente come il compilatore risponda ;


il codice è questo




=========================

ipotesi
chars [6] = { 'a' ,'5' , 'm' , 'b' ,'3' , 'a' } ;
char *temp ;
temp = (char*) malloc (sizeof (char ) *6 ) ;


if ( ! (chars[i] >= '0' && chars [i] <= '9' ) ) /* questa riga è il problema */
{

*temp = chars [i] + tot ;
}


else
{
*temp = chars [i] - tot ;

}





allora ;
le parentesi tonde hanno priorità su tutto nella riga , in questione , dunque prima viene valutato che le condizioni dei due && siano vere
, e successivamente che siano false con il "!" ( NOT)


ho capito correttamente?



grazie

lolide
05-02-2011, 13:44
Originariamente inviato da toni00c
if ( ! (chars[i] >= '0' && chars [i] <= '9' ) ) /* questa riga è il problema */

...

ho capito correttamente?



grazie

No. Quel ! davanti ad una condizione ne inverte il risultato.
Cioè l'if controlla sempre che un espressione sia vera tranne quando specifichi tu la condizione da verificare.

Quel codice controlla che la condizione AND sia vera, e la fa inverte quindi se è true diventa false, se è false diventa true (sono operatori dell'algebra di boole).
per controllare che l'espressione AND sia falsa devi fare


if ( (chars[i] >= '0' && chars [i] <= '9' ) == false )

toni00c
05-02-2011, 13:58
ciao lolide quindi in pratica se la condizione è falsa esegue la prima istruzione , altrimente
l'else!

ho capito bene ?

grazie

Alex'87
05-02-2011, 13:58
Originariamente inviato da lolide
per controllare che l'espressione AND sia falsa devi fare

if ( (chars[i] >= '0' && chars [i] <= '9' ) == false ) Come ha scritto lui è corretto (e comunque in C non esiste una parola chiave false).

lolide
05-02-2011, 14:11
Originariamente inviato da Alex'87
e comunque in C non esiste una parola chiave false).

Giusto. Comunque usa 0 e 1

Alex'87
05-02-2011, 14:22
Originariamente inviato da lolide
Comunque usa 0 e 1 No. Usa 0 per "falso" e qualsiasi altro valore per "vero".

lolide
05-02-2011, 14:47
Originariamente inviato da Alex'87
No. Usa 0 per "falso" e qualsiasi altro valore per "vero".

Si comunque io per non farmi venire una tendinite alle dita uso 0 e 1 :D

Se è vera puoi pure usare 102920392 qualsiasi numero > 0 è considerato true

Alex'87
05-02-2011, 17:44
Originariamente inviato da lolide
Se è vera puoi pure usare 102920392 qualsiasi numero > 0 è considerato true No. Qualsiasi numero diverso da 0 è considerato true.

Questo programmino stamperà "hello!" a schermo ;)

#include <stdio.h>

int main(int argc, char **argv) {
if (-1) {
printf("hello!\n");
}

return 0;
}

lolide
05-02-2011, 18:06
Aggiungo qualcosa anch'io a sto punto: è così perchè una variabile minore di un byte in C non esiste, anche i bool in realtà sono di un byte e non di un bit

:D

p91paul
05-02-2011, 19:56
@ toni00c

quell'istruzione esegue l'and e poi inverte il risultato. in pratica fa l'else solo se tutte e 2 le condizioni sono vere.

Loading