Aioverst 2020-01-16 18:45 采纳率: 100%
浏览 594
已采纳

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条回答 默认 最新

  • greatofdream 2020-01-16 22:10
    关注

    这是一个很底层的问题,证明了高级语言的屏蔽底层的重要性和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.

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥15 关于#matlab#的问题:在模糊控制器中选出线路信息,在simulink中根据线路信息生成速度时间目标曲线(初速度为20m/s,15秒后减为0的速度时间图像)我想问线路信息是什么
  • ¥15 banner广告展示设置多少时间不怎么会消耗用户价值
  • ¥16 mybatis的代理对象无法通过@Autowired装填
  • ¥15 可见光定位matlab仿真
  • ¥15 arduino 四自由度机械臂
  • ¥15 wordpress 产品图片 GIF 没法显示
  • ¥15 求三国群英传pl国战时间的修改方法
  • ¥15 matlab代码代写,需写出详细代码,代价私
  • ¥15 ROS系统搭建请教(跨境电商用途)
  • ¥15 AIC3204的示例代码有吗,想用AIC3204测量血氧,找不到相关的代码。