De nombreux compilateurs semblent ne garder que 0 ou 1 dans les valeurs booléennes, mais je ne suis pas sûr que cela fonctionnera toujours :
int a = 2;
bool b = a;
int c = 3 + b; // 4 or 5?
De nombreux compilateurs semblent ne garder que 0 ou 1 dans les valeurs booléennes, mais je ne suis pas sûr que cela fonctionnera toujours :
int a = 2;
bool b = a;
int c = 3 + b; // 4 or 5?
Est-ce que C/C++ .......
Il n'y a pas de langage nommé C/C++.
le type bool est toujours garanti à 0 ou 1 lorsqu'il est transtypé en int?
En C++ oui car la section $4.5/4 dit
Une rvalue de type bool peut être convertie en une rvalue de type int, false devenant zéro et true devenant un.
.
int c = 3 + b;
// 4 ou 5 ?La valeur de c sera 4
Un autre exemple lorsque vous êtes hors du bateau sûr :
bool b = false;
*(reinterpret_cast<char*>(&b)) = 0xFF;
int from_bool = b;
cout << from_bool << " is " << (b ? "true" : "false");
Sortie (g++ (GCC) 4.4.7) :
255 is true
A ajouter à l' exemple de FredOverflow .
Il n'y a pas de type bool en C avant C99 (comme C90), cependant le type bool en C99/C++ est toujours garanti comme étant 0 ou 1.
En C, toutes les opérations booléennes sont garanties de renvoyer 0 ou 1, que le type booléen soit défini ou non.
Donc a && b
ou !a
ou a || b
renverra toujours 0 ou 1 en C ou C++ quel que soit le type de a
et b
.
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.