二进制转换为十进制函数求助!!
在网上找到这样一个程序,可是中间注释的地方看不懂,求大侠指导。
main()
{ char *p,s[6];int n; /*为什么要定义个指针还要定义数组*/
p=s;
gets(p);
n=0;
while(*(p)!='\0')
{
n=n*2+*p-'0'; /*这个地方为什么是这个,这个算法看不懂啊*/
p++;
}
printf("%d\n",n);
}
[解决办法]
n=n*2+*p-'0'
手工转换时你是怎么做的,好好想想。
[解决办法]
main() { char *p,s[6];int n; /*数组s是用来储存输入的二进制数,p指针用于指示数组内的字符*/p=s; gets(p); n=0; while(*(p)!='\0') {n=n*2+*p-'0'; /*这里相当于一元多项式求和*/p++;} printf("%d\n",n); }
[解决办法]
来晚了....
为什么要定义个指针还要定义数组
指针要指向一个地址,否则,他的地址未知,gets到的数据放到了未知的地方,是非法操作。
这个地方为什么是这个,这个算法看不懂啊
这个是哪个,我不知道。
单步调试,看每次循环n的值就能明白了。
比如 字符串111 转 十进制
第一次 n1 = 1
第二次 n2 = 3 = n1 * 2 + 1
第三次 n3 = 7 = n2 * 2 + 1
[解决办法]
p = s+5 ; //指向字符串最低位 int n =0 ; int i=0 ; //计算当前是第几位 while(p>=s) { n= n + *p * i i++; }
[解决办法]
你先看哈十进制由数组最低位求和的例子,从最低位求只是没有从最高位求直观而已(因为数组最低位对应十进制数最高位),其实都是当前数乘以进制的权数次方累加的。任何进制的都是这样。觉得不好理解可以先用k(当前数) *pow(2,权数)累加吧。手机也不好贴代码了。然后定义一个指针是为了便于操作(地址自增),数组名是一个常量地址,不能进行改变。
[解决办法]
LS各位正解、
定义个指针 p 的作用是后面能用 p++ 运算 数组名不能 s++ 只能用循环取值