尝试理解编译器如何完成转换/转换,例如,从float转换为int时

时间:2010-07-09 19:06:07

标签: downcast

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

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

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

我猜想,我对某些错误信息感到困惑。

(我读了一些关于tag = downcasting的问题,关于它是否是演员或转换的辩论,我对它的名称并不是很感兴趣,因为两者都是由编译器执行的,但是关于如何这是正在执行的。)

... 感谢

2 个答案:

答案 0 :(得分:0)

在谈论基本类型而不是指针时,就完成了转换。因为浮点和整数表示非常不同(通常分别是IEEE-754和两个补码),所以它不仅仅掩盖了一些比特。

如果你想看到没有进行转换的浮点数表示为int,你可以这样做(在C中):

float f = 10.5;
int i2 = (int*)&f;
printf("%f %d\n", f, i2);

答案 1 :(得分:0)

大多数CPU架构提供本机指令(或多指令序列)来执行float< - > int转换。编译器通常只生成该指令。通常有更快的方法。这个问题有一些很好的信息:What is the fastest way to convert float to int on x86