繁体   English   中英

通常的算术转换和整数提升

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM