将0、1字符串表示的二进制数转换成对应的十进制数,大家帮我看看这是什么算法

将0、1字符串表示的二进制数转换成对应的十进制数,大家帮我看看这是什么算法
#include <stdio.h>
int fun( char *p )
{
int y;
y=0;
while(*p!='\0')
{
y=y*2+*p-'0';
p++ ;
}
return(y );
}
void main()
{
char str_b[9];
printf("Enter binary string: ");
gets(str_b);
printf("\nDecimal is: %d\n",fun(str_b) );
getch();
}
程序肯定对的没问题,就是不知道这是用的什么算法,有哪位大神知道吗

这有什么算法,

就是把二进制字符串转成整数,
while(*p!='\0')
{
y=y*2+*p-'0';
p++ ;
}

*p-'0'; 就是把一位二进制字符, 转成数字,
也就是: '0'转成0, '1' 转成 1

y=y*2+ ___
就是每多一位, 就乘以2, 因为是2进制追问

2进制转换成10进制不是按权展开相加法吗,而且从低位开始
比如10100111
应该是2^0*1+2^1*1+2^2*1+2^3*0+2^4*0+2^5*1+2^6*0+2^7*1
和程序用的不是一种方法

追答

也可以从高位开始,一个简单例子
10100111
= 2^7*1+2^6*0+2^5*1+2^4*0+2^3*0+2^2*1+2^1*1+2^0*1
= ((((((1*2 + 0)*2+1)*2+0)*2+0)*2+1)*2+1)*2+1
=167

其中括号里面先算,
就是每位在加之前先乘以2, 这样2^7*1的这个1最后被一共乘了7次2,
只是把从低位的一次就乘7次2改成了分7次乘.

温馨提示:答案为网友推荐,仅供参考
相似回答