当我在C ++中为一个int变量赋一个float变量时会发生什么?

时间:2014-12-13 11:19:09

标签: c++ assembly

首先让我说我对议会不太了解,但这是我想知道的事情。

假设我有一个C ++代码,如下所示:

float f = 34.2;
int i;

i = f;

现在很明显,执行此代码时会发生的事情是f(34.2)的值将转换为整数值(34)并分配给i

我的问题是这种转换是如何发生的,我的意思是它是在运行时发生的,所以在运行时有一个嵌入到可执行文件中的代码,如下所示:f被分配给i },现在我知道f是一个浮点数,i是一个整数,所以我应该做的是将f变量中的位转换为整数表示,然后将其赋值给i;

或者发生了什么,在编译时,i = f将直接被将float转换为整数的代码替换?

1 个答案:

答案 0 :(得分:0)

您的代码是

float f = 34.2;
int i;

i = f;

只需调试并查看Dis-assembly窗口。

float f = 34.2;
01175498  movss       xmm0,dword ptr ds:[117DF70h]  
011754A0  movss       dword ptr [f],xmm0  
int i;

i = f;
011754A5  cvttss2si   eax,dword ptr [f]  
011754AA  mov         dword ptr [i],eax  

您可以看到正在调用指令cvttss2si。这是Mats Petersson在评论中所说的。该指令将float转换为其整数表示。