C语言之浮点型 5

问个问题,大神帮解释下。floata=3.6;printf("a=%d\n",a);输出的结果为:-1073741824把3.6改成3.5输出的结果为0。floata=3... 问个问题,大神帮解释下。
float a = 3.6 ;
printf("a = %d \n",a);
输出的结果为:
-10 7374 1824
把3.6改成3.5输出的结果为0。

float a=3.6 在内存中这样存放的大概是这样的:
0100 0000 0110 0110 0110 0110 0110 0111
int ,float在vc++6.0中同样占4个字节。
%d取出来怎么是个负数。高位为0,不是正数嘛。
展开
 我来答
qipilangfour
2013-08-23 · TA获得超过232个赞
知道小有建树答主
回答量:274
采纳率:0%
帮助的人:127万
展开全部

LZ看错了吧。

3.6内存

66 66 66 40

3.5内存

00 00 60 40

 

浮点数包括float和double两种类型,float占32位,double占64位。其二进制存储格式遵循IEEE754标准。以float为例:

符号位:正数为0,负数为1。以float型数据123.456为例,分析其二进制存储格式。首先将十进制数123.456转换为二进制数为:1111011. 01110100101111001 (其中0.456如何转换为二进制?不断乘以2…)。1111011. 01110100101111001 即1. 11101101110100101111001乘以2的6次方。首先这是一个正数,则符号位为0。阶码为6,不过要转换成移码(计算机移码就是在原有的补码的基础上对于符号取反。对于8位存储数字,例如:-1的补码是11111111,它的移码就是01111111),6的移码为10000101。尾数则为1. 11101101110100101111001的小数部分,即11101101110100101111001。所以123.456的二进制存储格式为:0  10000101  11101101110100101111001

追问
没错,大家的都是对的.
你用的是小端模式十六进制表示的吧.
我在后面一位有效数,还进行了0舍1入....
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友bdad0e7
2013-08-24 · 超过26用户采纳过TA的回答
知道答主
回答量:100
采纳率:0%
帮助的人:57.3万
展开全部

(改了下回答)

参考下面的链接

http://www.cnblogs.com/zhaoyl/archive/2012/04/21/2462409.html

http://stackoverflow.com/questions/2377733/how-does-this-program-work/2377772#2377772


还不明白的话,用下面的程序测试:

#include <stdio.h>
int main(int argc, char *argv[])
{
    float a = 3.6;
    double aa = (double)a;
    printf("a = %d, 0x%x\n", a, a); 
    printf("aa = 0x%llx\n", *((long long unsigned int *)&aa));
    printf("aa = %d\n", aa);
    return 0;
}

输出:

a = -1073741824, 0x400ccccc
aa = 0x400cccccc0000000
aa = -1073741824

其实你的问题的原因就是,c标准规定可变参数函数(printf)传参时,float要转成double,a转成double后的aa 为 0x400ccccc c0000000,而printf收到 0x400ccccc c0000000这个参数时由于输出%d只需要4字节,所以就把低4字节0xc0000000作为参数输出了,所以你看到的就是一个负数。

用下面的代码可以测试输出高4字节,(注意只传了一个参数,输出两个数)

printf("a = %d, %d\n", a);
更多追问追答
追问
0xc0000000 输出的是一个正数.
追答
0xc0000000 很明显是个负数,就是-1073741824
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
蓉雪球
2013-08-23 · TA获得超过8998个赞
知道大有可为答主
回答量:2846
采纳率:79%
帮助的人:720万
展开全部
你试过3。5在内存中的数据吗?

这个可能是编码的问题,不同的有不同的结果。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
阳光仍然很刺眼
2013-08-23
知道答主
回答量:22
采纳率:0%
帮助的人:8万
展开全部
输出printf("a=%f\n",a);你定义的是浮点型 当然用%f,%d是用于整型的输出中的
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
zhangqingxian
2013-08-23 · TA获得超过268个赞
知道小有建树答主
回答量:362
采纳率:0%
帮助的人:308万
展开全部
吃饱没事干的主......
追问
管你毛事,滚.不回答还在啰嗦,欠操!
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(4)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式