J'essaie de comprendre ce qui se passe sous le capot de c conversions, et différents types de promotions et de comparer des choses et tout cela.Conversions arithmétiques habituelles et promotion d'entier
union myUnion{
int intVal;
float floatVal;};
if (m.floatVal == m.intVal)
{
cout << "BINGO!";
}
if (*ptrInt == *ptrInt2)
{
cout << "BINGO!" << endl << *ptrInt << endl << *ptrInt2;
}
La première instruction if est évaluée à false et la seconde if à la valeur true.
Comment c compilateur interprète ces valeurs m.floatVal, m.intVal. Je veux dire ce qui se passe là-bas, dans l'assemblage, parce que ça va tourner sur le CPU.
De plus, m.floatVal, m.intVal est évalué en fonction de la variable que j'ai initialisée en premier.
m.floatVal = 3; obtient d'abord quelque chose m.intVal = 3; d'abord obtient quelque chose d'autre.
Au final, il y a la même valeur ici!?!?!?!?!?!?
Deuxième exemple:
char minstogo = 0x98;
if (minstogo <= 7) {
cout << "BEAST!";
} beast is printed
char minstogo = 0x98;
if ((unsigned char)minstogo <= 7) {
cout << "BEAST!";
} nothing is printed
char minstogo = 0x98;
if (minstogo <= (unsigned char)7) {
cout << "BEAST!";
} beast is printed
Comment le compilateur interprète ce gâchis et ce qui se passe en bas de l'ensemble?
Troisième exemple: Comment un flottant est-il converti en int? Qui les bits sont tous remappés?
Merci beaucoup les gars! Je vous remercie.
votre compréhension de l'union est fausse: il n'y a pas de conversion du tout. Consultez ce lien: https://www.tutorialspoint.com/cprogramming/c_unions.htm –
techniquement (selon la norme) 'if (m.floatVal == m.intVal)' invoque un comportement non défini * car un seul les membres d'un 'union' peuvent être actifs à la fois (en pratique, la plupart des compilateurs les traiteront comme 'union' en C) – UnholySheep
Vous continuez à dire C quand vous avez étiqueté C++. Est-ce que vous posez des questions sur le C++ comme le suggère votre code, ou demandez-vous vraiment sur C? –