首先让我说我对议会不太了解,但这是我想知道的事情。
假设我有一个C ++代码,如下所示:
float f = 34.2;
int i;
i = f;
现在很明显,执行此代码时会发生的事情是f
(34.2)的值将转换为整数值(34)并分配给i
。
我的问题是这种转换是如何发生的,我的意思是它是在运行时发生的,所以在运行时有一个嵌入到可执行文件中的代码,如下所示:f
被分配给i
},现在我知道f
是一个浮点数,i
是一个整数,所以我应该做的是将f
变量中的位转换为整数表示,然后将其赋值给i
;
或者发生了什么,在编译时,i = f
将直接被将float转换为整数的代码替换?
答案 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转换为其整数表示。