将8进制数字转换成10进制 20

程序描述:1.功能八进制转换为十进制代码如下#include<stdio.h>main(){char*p,s[6];intn;p=s;gets(p);n=0;while(... 程序描述:
1.功能
八进制转换为十进制
代码如下
#include<stdio.h>

main()
{ char *p,s[6];
int n;
p=s;
gets(p);
n=0;
while(*(p)!='\0')
{n=n*8+*p-'0';
p++;}
printf("%d",n);
}

我的疑问:
1.复合语句
while(*(p)!='\0')
{n=n*8+*p-'0';
p++;}
执行的条件是检测到数组内的字符不是“\0”,p++是变量自增,但是最关键的这一句n=n*8+*p-'0';我却看不懂。举个例子来说,如果输入的八进制数字是137那么计算相应的十进制数应该是n=1*8*8+3*8+7*1,可是我却和n=n*8+*p-'0';联系不上,看不出程序是怎么计算的。这是什么算法啊
2.我稍微明白一点的是数组中存储的是数字字符0-9每个对应不同的ASCI值,可是我记得在一定范围内int和char是通用的啊,为什么不能直接存储数字呢?
3.这个程序应该不能计算带有小数点的数字的进制转换,如果我型实现这一点该如何改动代码呢?
以上就是我的3点疑问,希望各位高手不吝赐教,谢谢!
展开
 我来答
自在飞花2006
2010-06-10 · TA获得超过371个赞
知道小有建树答主
回答量:165
采纳率:0%
帮助的人:0
展开全部
1、八进制137计算过程如下:
n=0;指针p指向字符‘1’;
n=n*8+'1'-'0'=1;p++后,p指向‘3’;
n=n*8+'3'-'0'=11;p++后,p指向‘7’;
n=n*8+‘7’-‘0’=95;p++后,p指向‘\0’;
循环结束。最终n=95;
因为字符是用ascll码表示的,所以可以作为int使用。
楼主可以测试:int a='7'-'0';输出a,会发现a=7.
2、我不知道你具体想说什么,在内存中char和对应的int值是一样的,都是由1和0来表示。之所以表现形式不一样,是因为编译器帮你区分了它的类型。
3、八进制的小数?这个不要费心思了。会计算二进制的小数部分的转换就可以了。如果你实在想做,我可以说一下思路。小数部分要和整数部分分别做,然后相加。假设八进制数0.137,那么结果为1*0.125+3*0.125*0.125+7*0.125*0.125*0.125
具体实现的话你自己考虑一下吧。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式