Trying to understand how the casting/conversion is done by compiler,e.g., when cast from float to int

a 夏天 提交于 2019-12-25 09:42:28

问题


When a float is casted to int, how this casting is implemented by compiler. Does compiler masks some part of memory of float variable i.e., which part of memory is plunked by compiler to pass the remaining to int variable.

I guess the answer to this lies in how the int and float is maintained in memory.

But isn't it machine dependent rather than compiler dependent. How compiler decides which part of memory to copy when casted to lower type (this is a static casting, right).

I am kind of confused with some wrong information, I guess.

(I read some questions on tag=downcasting, where debate on whether it is a cast or a conversion was going on, I am not very much interested on what it is called, as both are performed by compiler, but on how this is being performed).

... Thanks


回答1:


When talking about basic types and not pointers, then a conversion is done. Because floating point and integer representations are very different (usually IEEE-754 and two's complement respectively) it's more than just masking out some bits.

If you wanted to see the floating point number represented as an int without doing a conversion, you can do something like this (in C):

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



回答2:


Most CPU architectures provide a native instruction (or multi-instruction sequence) to do float<->int conversions. The compiler will generally just generate this instruction. There's often faster methods. This question has some good information: What is the fastest way to convert float to int on x86.



来源:https://stackoverflow.com/questions/3215750/trying-to-understand-how-the-casting-conversion-is-done-by-compiler-e-g-when-c

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!