相关疑难解决方法(0)

如何在C++中实现浮点转换?(double to float或float to double)

所以我搜索了这个主题,发现没有什么真正相关的.

我试着看看这个简单代码背后的程序集:

int main(int argc, char *argv[])
{
    double d = 1.0;
    float f = static_cast<float>(d);

    system("PAUSE");
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

这是(使用Visual Studio 2012):

    15:     double d = 1.0;
000000013FD7C16D  movsd       xmm0,mmword ptr [__real@3ff0000000000000 (013FD91AB0h)]  
000000013FD7C175  movsd       mmword ptr [d],xmm0  
    16:     float f = static_cast<float>(d);
000000013FD7C17B  cvtsd2ss    xmm0,mmword ptr [d]  
000000013FD7C181  movss       dword ptr [f],xmm0
Run Code Online (Sandbox Code Playgroud)

我对组装不太满意,但无论如何都试图分析它.所以前两行似乎将双精度值移动3ff0000000000000到寄存器中,然后将寄存器的内容移动到d的内存地址.

然后,我只是不确切知道下一行是什么.该cvtsd2ss操作显然是一个将双精度浮点值转换为单精度浮点值的指令,但我无法找到该指令实际执行的操作.(然后将转换后的值移动到f)的存储空间.

所以我的问题是,这个转换实际上是如何完成的?我知道C++演员会在另一种类型中产生最接近的值,但除此之外,我不知道所执行的实际操作......

c++ floating-point assembly type-conversion

11
推荐指数
1
解决办法
4988
查看次数

标签 统计

assembly ×1

c++ ×1

floating-point ×1

type-conversion ×1