Xu *_*ong 8 c c++ casting type-conversion
我是C编程语言的新手,我想问一个问题.
整数我在这里铸造浮动然后f(不知何故)成功代表5.0:
int i = 5;
float f = i; //Something happened here...
Run Code Online (Sandbox Code Playgroud)
但是,如果我们尝试这种方法:
int i = 5;
float f = *(float *)&i;
Run Code Online (Sandbox Code Playgroud)
f不会得到5.0,因为它以"float的方式"解释存储在i中的位.那么编译器在第一种情况下实际上做了多少魔术呢?这似乎是一项非常努力的工作......有人可以指明吗?谢谢.
Ste*_*sop 13
这是一项努力工作,但任何具有浮点支持的CPU都会提供执行它的指令.
如果您必须int为自己将2的补码转换为IEEE浮点格式,您将:
nint 的顶部位(从第一个设置的非符号位之后的位开始)复制到float的有效位数中.n然而,在a float(23位为32位单精度浮点数)中有很多有效位.如果其中有任何剩余位int(即,如果它大于2 24),并且在您有空间的位之后的下一位是1,则根据操作中的IEEE舍入模式,您可能会或可能不会向上舍入.int到float.如果你看看组件
int i = 5;
000D139E mov dword ptr [i],5
float f = i;
000D13A5 fild dword ptr [i]
000D13A8 fstp dword ptr [f]
Run Code Online (Sandbox Code Playgroud)
fild是神奇的东西