Maison  >  Article  >  développement back-end  >  Quelle est la valeur de `c` dans le code C/C suivant : `int a = 2 ; bool b = a; int c = 3 b;`?

Quelle est la valeur de `c` dans le code C/C suivant : `int a = 2 ; bool b = a; int c = 3 b;`?

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2024-11-19 20:53:02935parcourir

What is the value of `c` in the following C/C   code: `int a = 2; bool b = a; int c = 3   b;`?

Conversion de booléen en int : valeurs garanties de 0 ou 1

Une idée fausse courante surgit lors de la conversion de valeurs booléennes en int. Alors que de nombreux compilateurs semblent stocker les booléens sous la forme 0 ou 1, la question demeure : ce comportement est-il garanti ?

Question :

Considérez l'extrait de code C suivant :

int a = 2;
bool b = a;
int c = 3 + b; // 4 or 5?

Quelle sera la valeur de c:4 ou 5 ?

Réponse :

Oui, c sera toujours 4 en C et C.

Explication :

  • C : Selon la norme C (§4.5/4), "Une rvalue de type bool peut être convertie en une rvalue de type int, false devenant zéro et true devenant un." Par conséquent, b est converti en 0.
  • C : En C (§6.3.1.2/1), "Lorsqu'une valeur scalaire est convertie en _Bool, le résultat est 0 si la valeur est égal à 0 ; sinon, le résultat est 1." Cela implique que a est converti en 1 et stocké dans b.
  • Conversion en int : La conversion de _Bool en int est simple car int peut contenir à la fois 0 et 1 (§6.3.1.3) . Dans les deux cas, la valeur de b reste inchangée, ce qui fait que c est 3 0 = 4.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn