c语言双长整型用不了,C语言中,要得到的结果是双精度的,为什么用整型格式输出是很大的整数,而不是将原...

满意答案

如果用%d,得到的数为1546188226

下面我们通过实验来剖析为什么得到的是这个数,而不是8

(1)在加入一行代码并设置断点如下:

int a = 7.1;

                double b = 1.88;

double c = a + b;//加此行代码(注:因int+double自动转double,故c用double)

         printf("%d",a+b);//在此行按F9设置断点

(2)F5运行程序,将停在printf行,打开watch变量查看窗口(如果你用的是vc6.0,在菜单view(视图)→debug windows(调试窗口)→Watch(查看)打开)。输入c,然后加个取地址符成 &c。这时候可以看到c变量的地址

(3)打开内存查看窗口(VC6.0打开位置同上面的查看窗口,快捷键Alt+6),由于c double型是4个字节长度,所以在内存查看窗口内右键选第三项long Hex Format。然后把(2)中看到的c变量的地址输入到内存查看窗口上,回车,这时可以看到c地址所对应的内存中的数据值为5C28F5C2,这是个十六进制的值,用计算器将其转换为十进制发现,这个值就是之前提到的1546188226

分析总结:这是因为对于编译器来说,它并不知道整形、浮点型的区别,它只认内存中的数据,并根据你的参数要求也可以说是规则(%d还是%f)去处理显示内存中对应地址上的数据。

所以说,1546188226和8.88只不过是5C28F5C2不同的表达方式,就像同一个词在不同的场合有不同的意思一样,需要给它个合适的环境它才能做出正确的表达

00分享举报

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值