0

当 float 转换为 int 时,编译器如何实现此转换。编译器是否屏蔽了浮点变量的某些内存,即编译器将哪一部分内存传递给 int 变量。

我想这个问题的答案在于 int 和 float 如何在内存中维护。

但它不是依赖于机器而不是依赖于编译器。编译器如何决定在转换为较低类型时复制哪一部分内存(这是一个静态转换,对)。

我想我对一些错误的信息感到困惑。

(我读了一些关于 tag=downcasting 的问题,关于它是强制转换还是转换的争论正在进行中,我对它的名称不太感兴趣,因为两者都是由编译器执行的,但是关于它是如何被执行的执行)。

... 谢谢

4

2 回答 2

0

大多数 CPU 架构都提供本地指令(或多指令序列)来进行浮点<->int 转换。编译器通常只会生成这条指令。通常有更快的方法。这个问题有一些很好的信息:在 x86 上将 float 转换为 int 的最快方法是什么

于 2010-07-09T19:57:26.250 回答
0

当谈论基本类型而不是指针时,就完成了转换。因为浮点和整数表示非常不同(通常分别是 IEEE-754 和二进制补码),它不仅仅是屏蔽掉一些位。

如果您想在不进行转换的情况下查看表示为 int 的浮点数,您可以执行以下操作(在 C 中):

float f = 10.5;
int i2 = (int*)&f;
printf("%f %d\n", f, i2);
于 2010-07-09T19:32:58.137 回答