[英]Are the “usual arithmetic conversions” and the “integer promotions” the same thing?
[英]Usual arithmetic conversions and Integer promotion
我正在尝试了解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
编译器如何解释这种混乱情况,以及汇编中发生了什么?
第三个示例:浮点数如何转换为整数? 谁都被重新映射?
十分感谢大家! 谢谢。
第一个例子:
union myUnion{
int intVal;
float floatVal;};
if (m.floatVal == m.intVal)
{
cout << "BINGO!";
}
这是c ++中的未定义行为。 写入intVal
,读取floatVal
是未定义的行为。 写入floatVal
,读取intVal
是未定义的行为。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.