问答详情
源自:2-9 强制类型转换

为什么这里原来的输出结果是-1248013944

http://img.mukewang.com/55dfc45500017f6a14470190.jpg

和题目一样


提问者:很爱很爱你2015 2015-08-28 10:16

个回答

  • 越飞越高
    2016-11-10 17:55:14

    没有强制转换的时候将输出语句printf内的%d改为%f就会输出2.5,如果不改直接用%d输出,那么C语言中无法识别只定义的浮点型而调用的整型,导致出现乱码,随机输出一个数

  • onemoo
    2015-08-30 16:40:12

    浮点数在储存时通常遵循IEEE754标准,即将整数部分和指数部分分别存入不同的位中。不过不同平台会有不同的实现,不一定都遵循IEEE标准。

    printf会将后面的相应参数按照第一个参数中格式化指示符进行解释,这样浮点数的二进制表示如果当成是整型的话,就会出现类似“乱码”的输出。具体输出多少跟你的平台实现有关,在我的64位机器上用gcc编译,打印出的是0。

  • 很爱很爱你2015
    2015-08-28 17:20:34

    我是说不是没有强制转换的时候的输出结果为什么是-1248013944

  • xiedukai
    2015-08-28 13:26:41

    你那个双精度如果想转成整数输出,就得利用强制转换,在printf中的num前加(int),成(int)num。