我正在努力了解c转换的内幕,以及不同类型的促销和比较内容以及所有这些内容。
union myUnion{
int intVal;
float floatVal;};
if (m.floatVal == m.intVal)
{
cout << "BINGO!";
}
if (*ptrInt == *ptrInt2)
{
cout << "BINGO!" << endl << *ptrInt << endl << *ptrInt2;
}
第一个if语句被评估为false,第二个if语句被评估为true。
c编译器如何解释此值m.floatVal,m.intVal。我的意思是在那里发生什么,进入汇编,因为那将在CPU上运行。
此外,m.floatVal,m.intVal根据我首先初始化的变量得到不同的值。
m.floatVal = 3;先得到一些东西 m.intVal = 3;先得到别的东西。
最后那里有相同的价值!?!?!?!?!?!?
第二个例子:
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
编译器如何解释这个混乱以及组件下发生了什么?
第三个例子: 浮点数如何转换为int?这些位都被重新映射了?
非常感谢你们!谢谢。
答案 0 :(得分:2)
第一个例子:
union myUnion{
int intVal;
float floatVal;};
if (m.floatVal == m.intVal)
{
cout << "BINGO!";
}
这是c ++中未定义的行为。写入intVal
后,阅读floatVal
是未定义的行为。写入floatVal
后,阅读intVal
是未定义的行为。