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++ - 当 "b2"不起作用时如何构建 Boost

c++ - 这是什么错误?

c++ - C 函数 **ntohl** 给出链接器错误(未解析的外部)

c# - 如何将变量转换为与动态变量相同的类型?

将 32 位数字转换为 16 位或更少

c++ - OpenCV:如何从提供的图片中检测粗红线及其轮廓

c# - 将匿名类型转换为 IList

c++ - dynamic_cast 不保证一个有效的、完整的对象?

c - GCC 默认整数/浮点算术行为

c++ - 创建包含字符序列的 nan 时,如何取回字符序列?