为了账号安全,请及时绑定邮箱和手机立即绑定

【请教】类型转换中会有很多问题,如下代码:

#include <stdio.h>

int main()

{

    double num = 2.5;      //定义浮点型变量num1并赋值为2.5

    printf("num的整数部分是%d\n", (int)num);

    printf("%d \n",num);

    printf("%d \n",2.5);

    printf("%d \n",(float)2.5);

    //*******

    printf("\n\nnum2 = num :\n");

    int num2 = num;

    printf("%d \n",num2);

    printf("%f \n",num2);

    printf("%g \n",num2);

    return 0;

}

【结果是:】


num的整数部分是2
4196047
4196051
4196051


num2 = num :
2
2.500000
2.5


【个人分析:】

前几个输出4196074是因为前一节说的  占字节大的数转换为小的数会出错

而后面输出int型的num2会输出2.5,这个。。。是因为什么呀老师?

正在回答

1 回答

你在第一个printf中是用强制类型转换的方式将num转换成int型传入,不过准确的说,在第二个printf中并不存在类型转换。

因为printf中%d代表它希望相应的参数类型为int,如果你传入的不是int型,一般来说编译器会给出警告的,通常仍可编译通过,但是在运行时printf函数仍然把那个参数当作int型来读取和打印。一般计算机中int和double的存储方式是不一样的,所以造成打印出很“奇怪”的数。


而那个num2,你用了一个double类型的num来初始化,所以编译器会先把num转换成int型来给num2作初值。转换方式就是截掉小数部分,所以num2的值就是2,类型就是int。

因此printf("%d \n",num2)打印出的结果很正确。同样的道理,后面的printf就依照错误的格式化字符错误地打印了,结果并不一定是2.5,实际上打印出什么都有可能。

0 回复 有任何疑惑可以回复我~
#1

林泽华 提问者

非常感谢!
2015-02-15 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消
C语言入门
  • 参与学习       926020    人
  • 解答问题       20793    个

C语言入门视频教程,带你进入编程世界的必修课-C语言

进入课程

【请教】类型转换中会有很多问题,如下代码:

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信