c++ - 浮点值如何在底层转换为整数

标签 c++ casting floating-point

首先,我完全不知道数据的低级机器表示(因此,如果我误解/误解了某些事情,请友善 - 但始终欢迎建议/更正)

显然,所有数据都以 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/

相关文章:

c++ - C++-如何在析构函数中删除子类

c++ - 递归函数是否可以在不将常量作为参数发送给它的情况下了解首次调用它的函数中的常量?

java - 使用通用类型参数转换异常 : Right way to do it?

objective-c - Objective-C . 将 int 转换为 float

c++ - 字段 'class' 有一个不兼容的 'class'

c++ - 常量正确性与非变异集合的混淆

ios - 无法执行存储在 Array[Any] 中的对象的方法

c - 空指针转换为其他指针类型 T 的行为与 T 不同

python - 如何用 float 除大数?

javascript - 检查两个具有浮点值的对象是否相等?