将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();
}
程序肯定对的没问题,就是不知道这是用的什么算法,有哪位大神知道吗
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次乘.