Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Valeur retournée par les comparaisons

2 réponses
Avatar
Marc Chantreux
Bonjour à tous,

int x;
x = 1 == 2;
printf("%d\n",x);

dans ce cas là, pas d'ambiguïté: x vaut 0. Mais quid du code suivant?

int x;
x = 1 != 2;
printf("%d\n",x);

Pour moi, impossible de connaître la valeur de x, je peux juste dire
qu'elle est non-nulle. gcc me renvoyant toujours 1, j'ai voulu savoir si
cette valeur était normalisée.

Je n'ai pas trouvé la réponse dans mon K&R. Dans ISO/IEC point 6.5.8.6,
on peut lire

"Each of the operators < (less than), > (greater than), <= (less than or
equal to), and >= (greater than or equal to) shall yield 1 if the
specified relation is true and 0 if it is false.90)
The result has type int"

J'aurais tendance a dire qu'il va de même pour == et != mais je n'ai
rien trouvé me le certifiant.

Si un exégète peut m'aider dans ma quête de vérité, cela m'aiderait
grandement dans ma compréhension de La Grande Question sur la Vie,
l'Univers et le Reste.

Cordialement,
Marc

2 réponses

Avatar
Pierre Maurette
Bonjour à tous,

int x;
x = 1 == 2;
printf("%dn",x);

dans ce cas là, pas d'ambiguïté: x vaut 0. Mais quid du code suivant?

int x;
x = 1 != 2;
printf("%dn",x);

Pour moi, impossible de connaître la valeur de x, je peux juste dire qu'elle
est non-nulle. gcc me renvoyant toujours 1, j'ai voulu savoir si cette valeur
était normalisée.

Je n'ai pas trouvé la réponse dans mon K&R. Dans ISO/IEC point 6.5.8.6, on
peut lire

"Each of the operators < (less than), > (greater than), <= (less than or
equal to), and >= (greater than or equal to) shall yield 1 if the specified
relation is true and 0 if it is false.90)
The result has type int"

J'aurais tendance a dire qu'il va de même pour == et != mais je n'ai rien
trouvé me le certifiant.

Si un exégète peut m'aider dans ma quête de vérité, cela m'aiderait
grandement dans ma compréhension de La Grande Question sur la Vie, l'Univers
et le Reste.


Dans ma copie de la norme (c99 draft) en §6.5.9.3

3
The == (equal to) and != (not equal to) operators are analogous to the
relational operators except for their lower precedence. Each of the
operators yields 1 if the specified relation is true and 0 if it is
false. The result has type int. For any pair of operands, exactly one
of the relations is true.

--
Pierre Maurette

Avatar
Marc Chantreux
Pierre Maurette wrote:

Dans ma copie de la norme (c99 draft) en §6.5.9.3


je te remercie bien bas.

cordialement,
marc