首先,我完全不知道数据的低级机器表示(因此,如果我误解/误解了某些事情,请友善 - 但始终欢迎建议/更正)
显然,所有数据都以 0 和 1 的序列表示。
整数只是简单的信息位,可以转换为任何 numeral system (来自二进制)。
然而, float 表示为符号+指数+分数
(让我们用IEEE 754浮点标准来说话),它们实际上只是相同的旧位(0和1)并且确实可以转换(当然不同)到任何数字系统。
当您执行简单的转换操作(请参阅下面的示例)时,您实际上会得到正确的结果,这是如何“神奇地”发生的?:
double a = 5.12354e3; // 5123.54
int b = int(a); // 5123
将符号+指数+分数
转换为符号+值
的计算机内部的逻辑是什么?它似乎不只是一个“普通”转换(之前有 4/8 字节 - 之后有 4 字节),对吗?
P.S.:如果我只是没有得到一个非常基本、明显的东西,抱歉。不管怎样,请解释一下。
最佳答案
插入每个浮点处理器都有的将 double 转换为整数指令很简单。
double a = 5.1e3; // 5123.54
MOVFD #5123.54, A(SP)
int b = int(a); // 5123
CVTDL A(SP), B(SP)
就其机制而言,您所要做的就是在尾数前面插入一个 1 位(浮点通常使用隐式存储);按指数进行位移位;然后纠正符号。
关于c++ - 浮点值如何在底层转换为整数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43813730/