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

来源:2-9 强制类型转换

林泽华

2015-02-07 13:53

#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回答

  • onemoo
    2015-02-08 22:56:08
    已采纳

    你在第一个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,实际上打印出什么都有可能。

    林泽华

    非常感谢!

    2015-02-15 12:13:25

    共 1 条回复 >

C语言入门

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

926026 学习 · 20793 问题

查看课程

相似问题