C语言 两题

#include"stdio.h"main(){inta,b,c;a=20;b=027;c=0x3F;printf("%d,%d,%d\n",a,b,c);printf(... #include "stdio.h"
main()
{ int a,b,c;
a=20;
b=027;
c=0x3F;
printf("%d,%d,%d\n",a,b,c);
printf("%o,%o,%o\n",a,b,c);
printf("%x,%x,%x\n",a,b,c);
}
为什么运行结果为
20,23,63
24,27,77
14,17,3f

#include "stdio.h"
void main()
{
float x=12345.54321;
double y=445566778899.987654321;
printf("%f\n",x);
printf("%f\n",y);
}
为什么运行结果为
12345.542969
445566778899.987670

请清楚的解释一下。。 谢谢
展开
 我来答
White_MouseYBZ
2014-02-08 · TA获得超过4万个赞
知道大有可为答主
回答量:2.1万
采纳率:82%
帮助的人:6489万
展开全部
  1. a=20; b=027; c=0x3F;中以0开头的是八进制,以0x开头的是十六进制。那么a、b、c的三种进制分别如下:

变量    十进制值    八进制值    十六进制值

    a        20                24                14

    b        23                27                17

    c        63                77                3f

printf中的控制符:%d表示以十进制形式输出;%o表示以八进制形式输出;%x表示以十六进制形式输出。

对照上述规则:

第一行printf("%d,%d,%d\n",a,b,c);是以十进制形式输出a、b、c,所以是20,23,63;

第二行printf("%o,%o,%o\n",a,b,c);是以八进制形式输出a、b、c,所以是24,27,77;

第三行printf("%x,%x,%x\n",a,b,c);是以十六进制形式输出a、b、c,所以是14,17,3f。

2.float型用32位二进制表示,有效的十进制数约6~7位,而控制符%f默认输出小数点后6位,所以,

float x=12345.54321;中的最后三位321并没有赋值给x,因为放不下了;但输出时又要输出6位小数,输出最后3位就是“随机”填上的——这里的“随机”并非时间随机,而是一台机器与另一台机器可能不一样,一套软件可能与另一套软件不一样,而在同一台机器、同一个软件平台下次次运行都是一样的。

double的情况与float的情况完全一个道理。只是double是64位二进制,能表示16~17位有效的十进制数!


            

追问
辛苦你了,懂了,谢谢!~
psxf91
2014-02-08 · TA获得超过428个赞
知道小有建树答主
回答量:558
采纳率:100%
帮助的人:482万
展开全部
第一个题:

定义a的时候值为20,20的八进制表示方式为24,,十六进制表示为14
定义b的时候值为027,这是一个8进制表示,因为有前导0,所以b的十进制值为23,八进制为27,十六进制为17
定义c的时候是0x3F,这是16进制的表示,因为有前导0x,所以c的十进制为63,八进制为77,十六进制为3f
在打印的时候,用的是小x,所以f是小写。

第二个题:
浮点型和双精度浮点型在内存中保存都是有一定误差的,默认打印的时候保留6位有效数字。
所以,虽然定义的时候是12345.54321,但是进入内存再读出来,可能就是不一精确的了。
double也是一样,默认打印输出的时候,保留6位小数。
所以由于这个特性,两个浮点变量不能直接用等号判断相等,而是要用一个区间。
更多追问追答
追问
第一题不懂c那一步。。第二题的答案是不确定的么?
追答
c这个变量定义的时候,用的是0x3F,所以告诉编译器,这是一个16进制的值。无论是多少进制,最后计算机都会转化成二进制存储的。那么打印这个二进制的时候,用%d就是十进制打出来,用%o就是8进制打出来,而用%x就是用小写abcdef的十六进制打出来。

第二个题答案和编译器和系统有关,输出结果在不同机器上可能相同,可能不同,但是标准规定,小数后面要保留6位有效数字。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
匿名用户
2014-02-08
展开全部
d代表十进制整数
o代表八进制整数
x代表十六进制整数
第一题

第二题 第一个 单精度浮点数 也就是 float 最多只有7个有效数字 所以小数点后最多六位 多的爆掉

f代表浮点数整数 小数点后只带六位 所以原本是double数按单精度输出只有六位
追问
请问 c=0x3F 怎么转换成八进制??不知道F要怎么处理
追答
不对 c=0x3F  和 c=63是一样 只是这是一种16进制赋值法  

你这时候可以用cout<<c试试看就知道了

至于他的转换 其实是在printf哪里 printf 可以改变整数输出的方式
同样一个整数 用printf("%d", 和 %o 就是两种输出方式
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
匿名用户
2014-02-08
展开全部
printf("%lf\n",y);试试
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式