39 votes

double négation en C: est-il garanti de retourner 0/1?

!!(x) garanti par la norme de renvoyer 0/1?

Notez que je ne pose pas de question sur c ++, où un type booléen est défini.

46voto

Mat Points 104488

Oui, en C99, voir §6.5.3.3/4:

Le résultat de la négation logique de l'opérateur ! est 0 si la valeur de son opérande compare inégales à 0, 1 si la valeur de son opérande compare égal à 0. Le résultat est de type int. L'expression !E est équivalent à (0==E).

Donc, !x et !!y ne peut que produire de 0 ou de 1, ints.

Pour les autres opérateurs, en C99, voir également Est le "vrai" résultat de >, <, !, &&, || ou == définies?

15voto

Tim Kemp Points 3515

Ceci est un commentaire vraiment, mais c'est trop long. (Merci de ne pas voter sur cette seule base.)

J'ai trouvé très bizarre document alors que la recherche de la norme pour répondre à votre question: La Nouvelle Norme C: Économique et Culturelle Commentaire. Et ils disent que les universités sont sous-financées. (Ici c'est la salle de 2083 page 10.5 MB PDF. L'ancien lien est juste la section sur la double négation.)

Il a ceci à dire sur le sujet de la double négation: "Un double négatif est très souvent interprétée comme une déclaration positive en anglais (par exemple, "Il n'est pas inconnu pour les doubles négations de se produire dans un code source en C"). La même sémantique qui s'appliquent en C. Cependant, dans certaines langues (par exemple, en espagnol), une double négative est interprété comme l'expression la plus négative (cette utilisation ne se produisent chez casual discours en anglais, par exemple, "vous n'avez encore rien vu", mais c'est rare et mal vu socialement1)."

Je crois que l'auteur serait heureux de savoir que c'est de n'utiliser que ce soit pour répondre à votre question (et la réponse est oui.)

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X