【发布时间】:2020-05-06 22:27:17
【问题描述】:
我只是想知道 CPU 如何“转换”浮点数。 我的意思是,我想当我们在 C/C++ 中使用“float”或“double”时,编译器使用的是 x87 单元,还是我错了? (我找不到答案)那么,如果是这种情况并且浮点数没有被模拟,编译器如何转换它?
【问题讨论】:
-
转换有特殊说明,编译器只需发出即可。此外,标量和向量转换之间存在差异,但手动转换的时间已经过去了。
-
编译器只需将其存储为适当的格式供 CPU 读取。然后它指向这个存储并且基本上说'请一个
fld'。 -
某些处理器具有特定的浮点寄存器,因此不需要“强制转换”。一个值直接从内存加载到寄存器或从寄存器直接存储到内存中。
-
“cast”操作告诉编译器以不同的方式处理变量。将整数转换为双精度会告诉编译器您希望将整数视为浮点数。编译器可能会发出从整数转换为浮点的 CPU 指令,或者编译器可能会将整数转换为浮点格式,然后存储到寄存器或内存中。
-
@usr2564301:编译器不需要自己转换数字。 x86 架构有一个
fild指令,它从内存中加载一个整数并将其转换为浮点数。