一个很菜的问题,但是我觉得不好理解.帮忙理解一下

newpyh 2003-06-22 05:55:50
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);
}

这是一个8进制转10进制的代码,
...全文
33 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
hero249 2003-06-23
  • 打赏
  • 举报
回复
应该是这样最好理解:X(10)=A7A6A5....A0(8)
=A7*8^7+A6*8^6+...A0
=((((((A7*8+A6)*8+A5)*8+...A1)*8+A0
chinazcw 2003-06-23
  • 打赏
  • 举报
回复
要说转换的原理嘛,就是根据在ASCII码中,字符之间的位置差来进行转换的。

如'0'的ASCII码为30H,'1'的ASCII码为31H,以此类推.....

说说你的例子吧,当你输入的是字符数字'8'的话。
‘8’-‘0’就相当于38H-30H,结果当然是等于8啦,不过现在的8已经变成数值型数据了
chinapp 2003-06-23
  • 打赏
  • 举报
回复
对不起,少打一个括号应该是((1x8+2)x8+3)x8+4=668
chinapp 2003-06-23
  • 打赏
  • 举报
回复
如果你要数学理解的话,简单!

比如说1234是一个八进位数,如何转换成10进位数呢?
就是(1x8+2)x8+3)x8+4=668
懂了吗?
xdspower 2003-06-23
  • 打赏
  • 举报
回复
X(10)=A7A6A5....A0(8)
=A7*8^7+A6*8^6+...A0
=((((((A7*8+A6)*8+A5)*8+...A1)*8+A0
newpyh 2003-06-23
  • 打赏
  • 举报
回复
谢谢各位的回答,但是我的实际问题是不知道为什么 n=n*8+*p-'0'这个式子能起到转换的作用

to lzh7800(海) : 你的是错的,应该是
第一次 *p ='7', n=0*8+'7'-'0'=7;
第二次 *p ='4', n=7*8+'4'-'0'=60;

八进制的74转化为十进制为7*8^1+4*8^0 ( 8^1 表示8的次方), 为什么用n=n*8+*p-'0'这个式子就能计算出结果呢
不理解的是纯数学问题,就不理解为什么别人把n=n*8+*p-'0'当做转换的公式,别人是怎样想到的,总该有个推论吧.
Beover1984 2003-06-22
  • 打赏
  • 举报
回复
p指向的ASCII码值减支'0'的值
晨星 2003-06-22
  • 打赏
  • 举报
回复
“*p-'0'”能把数字字符转换成整数,如*p == '4',则“*p-'0'”就是整数4。
w123wwei 2003-06-22
  • 打赏
  • 举报
回复
up
lzh7800 2003-06-22
  • 打赏
  • 举报
回复
举个例子:
*p表示一个数字字符,输入为74
第一次 *p='4', n=0*8+'4'-'0'=4;
第二次 *p='7', n=4*8+'7'-'0'=41;
lbaby 2003-06-22
  • 打赏
  • 举报
回复
*p是当前正在处理的字符
*p - '0' 就得到这个字符的实际值 如:*p='7',则*p - '0' =7

n=n*8+*p-'0'就是转换,然后累加

69,382

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧