web-dev-qa-db-fra.com

Utilisation des marques d'exclamation '!' en C

J'ai rencontré un problème impliquant des points d'exclamation et des entiers lors de la lecture d'un code dans mon livre de référence.

Disons que j'ai déclaré une variable entière nommée numéro - int number = 0;

J'utilise ensuite une fonction while impliquant un point d'exclamation et number

while(!number)
{
    ...
}

Je suis confus avec cela parce que je ne sais pas ce que signifie !number et quels seraient les résultats renvoyés possibles? Je ne sais pas si cela peut être utilisé, mais comme je l'ai dit, je l'ai vu dans mon livre.

Par conséquent, ce serait bien si quelqu'un pouvait me dire que signifie !number et que fait-il évaluer?

Merci d'avance.

6
Paul Filch

nous pouvons traiter ! comme non. Donc, si nombre est différent de zéro (+ ve ou -Ve), il renvoie zéro. Si c'est zéro, il retourne 1.

int i = 13;
printf("i = %d, !i = %d\n", i, !i);
printf("!0 = %d\n", !(0));
7
gangadhars

En C,! Nombre sera évalué à 1 si nombre == 0 et à 0 si nombre! = 0. Et en C, 1 est vrai et 0 est faux.

L'utilisation d'une comparaison explicite telle que nombre == 0 a le même effet, mais vous pouvez la trouver plus facile à lire.

5
TheWalkingCube

C'est une négation ou un "non" opérateur. En pratique! Nombre signifie "vrai si nombre == 0, faux sinon". Google "opérateurs unaires" pour en savoir plus.

4
RobP

Il est utilisé pour la négation d'un nombre. C'est un opérateur unaire.

Par exemple:-

Si nous l'utilisons avec zéro: -! 0 alors il deviendra 1

avec un! 1 = 0

1
Umesh

L'opérateur negation (! ) inverse simplement la signification de son opérande.

L'opérande ou l'expression doit être de type arithmétique ou pointeur. Mais l'opérande/le résultat de l'expression est implicitement converti en type de données bool (le booléen 0 signifie faux, Non nul signifie vrai).

Le résultat est vrai si l'opérande converti est faux; le résultat est faux si l'opérande converti est vrai. Le résultat est de type bool.

alors

while(!number)
{
    ...
}

puisque le nombre variable est 0, alors que (! nombre) c'est-à-dire! 0 qui est 'négation de 0' qui est 'VRAI' alors le code entre dans la boucle while ()

0
Sorcrer