这里的 k=k*10+*s++-'0'是什么意思啊??答案详细一些,谢谢!!!

来源:百度知道 编辑:UC知道 时间:2024/05/29 07:07:18
int f(char *s)
{
int k=0;
while(*s)
k=k*10+*s++-'0';
return k;

}
void main()
{
printf("%d\n",f("16"));
}
那个,我对ASCII码不是很了解 请回答再详细一些,最好讲一下具体的值,谢啦~~~~~

。。。。。。。还是不会算 我承认我笨。。。。。。。能不能再具体点。。。。。。。。。

分解成如下两句代码,你可能就容易理解了
k=(k*10)+(int)(*s)-(int)'0'; //(int)(*s) 的值依次为1和6的ASCII码
s++;

带入表达式的值
k=0*10+49-48
k=1*10+54-48
最后k的值为16

*s++ 表示先取s的值,再自增

计算机不认识字符,只认识二进制数,对一个字符,要想让它在计算机里得以表示,就必须将其转换成某个固定数值,程序按照这个映射关系处理
目前用的最广泛的字符集是美国国家标准局制定的ASCII码
ASCII码表你在网上搜一下 很多的

将字符做算术运算时就会将它转换成int类型,其值为该字符在ASCII码表中对应的整数
比如'0'的ASCII码为48,'1'的ASCII码为49,'6'的ASCII码为54

k=k*10+*s++-'0'相当于
k=k*10+(*s++)-'0'
因为算术运算自左向右结合的,减去'0'结果是它对应的ASCll码

同理等于:
p=*s++;
t=k*10;
q='0';
k=t+p-q-1
(q代表'0'的ASCII值)