non int ... ( ! 0) (! 1)

non int ... ( ! 0) (! 1) - C - Programmation

Marsh Posté le 20-03-2006 à 14:41:15    

salut
je sais que si on fait l'instruction suivant :

Code :
  1. if ( ! expression )   ....instruction...


on va tester le contraire de l'instruction .  
 
mais je ve savoir si sela marche egalement , lorsque l'expression est un int  :
 
exemple:
j'ai une variable f qui prand soit la val 1 soit la val 0 .
et je ve tester le contraire (si non f) càd:

Code :
  1. if ( !f )     ....instruction...


esque on peut faire ca.                           non int                :)  

Reply

Marsh Posté le 20-03-2006 à 14:41:15   

Reply

Marsh Posté le 20-03-2006 à 14:49:15    

Oui.
 
Tout ce qui est non nul retournera 0 avec !, ça fonctionne aussi avec les pointeurs, les entiers, etc.

Reply

Marsh Posté le 20-03-2006 à 15:31:09    

uleur a écrit :

salut
je sais que si on fait l'instruction suivant :

Code :
  1. if ( ! expression )   ....instruction...


on va tester le contraire de l'instruction .  
 
mais je ve savoir si sela marche egalement , lorsque l'expression est un int  :
 
exemple:
j'ai une variable f qui prand soit la val 1 soit la val 0 .
et je ve tester le contraire (si non f) càd:

Code :
  1. if ( !f )     ....instruction...


esque on peut faire ca.                           non int                :)


En C, la valeur entière "0" corresond au booléen "false" et toutes les autres valeurs entières correspondent à "true" (conceptuellement, dans les faits le C pre C99 n'a pas de booléens et utilise 0 et 1).
 
Le résultat, c'est que !0 donnera une valeur indéfinie mais considérée "vraie" (au sens booléen) 1 et !x avec x!=0 donnera 0
 
Voir la FAQ comp.lang.c sur les types booléens pour plus d'infos (et accessoirement ce serait une bonne idée de lire toute la faq) (et le site du forumeur Emmanuel Delahaye [sp?], regarde un peu la cat C tu le trouveras facilement)
 
edit boulette :o


Message édité par masklinn le 20-03-2006 à 17:20:50

---------------
I mean, true, a cancer will probably destroy its host organism. But what about the cells whose mutations allow them to think outside the box by throwing away the limits imposed by overbearing genetic regulations? Isn't that a good thing?
Reply

Marsh Posté le 20-03-2006 à 15:49:58    

Il me semble que certains ouvrages recommandent de ne pas traiter les entiers comme des booleéns mais à la place d'écrire l'expression complète:

Code :
  1. if (expression != 0)
  2. {
  3. //instructions
  4. }


Question de compréhension peut être.

Message cité 1 fois
Message édité par slash33 le 20-03-2006 à 15:50:55
Reply

Marsh Posté le 20-03-2006 à 17:19:39    

slash33 a écrit :

Il me semble que certains ouvrages recommandent de ne pas traiter les entiers comme des booleéns mais à la place d'écrire l'expression complète:

Code :
  1. if (expression != 0)
  2. {
  3. //instructions
  4. }


Question de compréhension peut être.


C'est surtout une question de choix de l'identificateur. C'est sûr que

Code :
  1. if (flag)
  2. {
  3. }


ou

Code :
  1. if (flag != 0)
  2. {
  3. }


n'a aucun sens. Par contre

Code :
  1. if (found)
  2. {
  3. }


est parfaitement clair et autodocumenté.
 


---------------
Des infos sur la programmation et le langage C: http://www.bien-programmer.fr Pas de Wi-Fi à la maison : http://www.cpl-france.org/
Reply

Marsh Posté le 20-03-2006 à 17:19:56    

Emmanuel Delahaye a écrit :

Non. !0 donne 1. C'est garanti par le langage. De même !(entier_different_de _0) donne 0.


Hum oui je l'ai relu après mais j'ai oublié de corriger, j'édite tout de suite [:pingouino]


Message édité par masklinn le 20-03-2006 à 17:21:14

---------------
I mean, true, a cancer will probably destroy its host organism. But what about the cells whose mutations allow them to think outside the box by throwing away the limits imposed by overbearing genetic regulations? Isn't that a good thing?
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed