Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
385 views
in Technique[技术] by (71.8m points)

c - float to int unexpected behaviour

can you please explain the o/p behavior of this program.

int main()
{
  float a = 12.5;
  printf("%d
", a);
  printf("%d
", *(int *)&a);
  return 0;
} 

can you please check code at http://codepad.org/AQRlAzkC
why is this output coming ..

See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Reply

0 votes
by (71.8m points)

You don't want to cast the float pointer to an integer pointer. Floats and integers are not stored the same way and if you do that then there is no conversion that will take place, and thus you will get garbage printed to the screen. If however you cast an int-value to a float-value then the compile will convert the float from it's internal type into an integer for you. So you should replace the (int *) with (int).

Also, %d is for decimal(integer) values. What you want is %f, which is for float values, for the first printf.

What you want is this:

#include <stdio.h>

int main()
{
  float a = 12.5;
  printf("%f
", a); //changed %d -> %f
  printf("%d
", (int)a); //changed *(int *)& -> (int) for proper conversion
  return 0;
} 

verified here: http://codepad.org/QD4kzAC9


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...