goatherd_
Aioverst
采纳率100%
2020-01-16 18:45

C语言int p=10; printf ("%d",1.2*p)输出值为什么为0? 令p=2,输出值又为什么等于858993459了?

已采纳

C语言int p=10; printf ("%d",1.2*p)输出值为什么为0? 令p=2,输出值又为什么等于858993459了? 难道是因为%d的存在所以后面不能有小数参与运算?

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 复制链接分享
  • 邀请回答

2条回答

  • zaq15csdn greatofdream 1年前

    这是一个很底层的问题,证明了高级语言的屏蔽底层的重要性和c语言对内存的灵活操纵,让人摸不到头脑。

    • 首先指出类型转换是要求尽可能不损失精度(原则问题),因此1.2认为double,那么和10相乘,10会类型转换为double,结果为double类型12.0
    • 其次12.0的内存存储,按照标准,应该写为0x40 28 00 00 00 00 00 00,四个字节。为何是这样,自己去翻一本计算机语言教材或者百度看看怎么存浮点数吧
    • 当然目前内存内对数字存储使用小端法;大端法很少见,一般会在网络传输中使用,所以内存存储就变成这样00 00 00 00 00 00 28 40,从左至右内存地址增大。
    printf("%d",)
    

    很可惜打印的是int,32位正好取了前面的4个字节00 00 00 00

    不过要是p=2那么最后结果2.4,你找了一个很难分解的小数,我就直接抄内存里的结果了,懒得笔算,存储为0x33 33 33 33 33 33 03 40,拿出前4个字节,33 33 33 33对应结果为858993459.

    点赞 2 评论 复制链接分享
  • caozhy 从今以后生命中的每一秒都属于我爱的人 1年前

    printf ("%f",1.2*p);
    或者 printf ("%d",(int)1.2*p); 但是这样写1.2取整为1,结果10

    点赞 1 评论 复制链接分享

相关推荐