C++程序中的一个小例子,不明白

来源:百度知道 编辑:UC知道 时间:2024/05/31 02:13:12
#include<iostream.h>
int fun(char *num)
{
int p=0,s=1;
for(int i=0;i<8;i++)
{s=1;
for(int j=7;j>0;j--)
s*=2;
p=p+num[i]*s;}
return p;
}
void main()
{
char num[8],ch;
cout<<"Enter an 8 bit bianry number";
for(int i=0;i<8;i++)
{
cin>>ch;
num[i]=ch;
}
cout<<fun(num)<<endl;
}
二进制往十进制上转换,但是不对。不知道什么地方出错了。
输入00000000,输出是一个很大的数。

程序修改后如下:
#include<iostream.h>
int fun(char *num)
{
int p=0,s=1;
for(int i=0;i<8;i++)
{s=1;
for(int j=7;j>0;j--)
s*=2;
p=p+(num[i]-'0')*s;} //需要把字符型转换为数字,方法为“字符-'0'”
return p;
}
void main()
{
char num[8],ch;
cout<<"Enter an 8 bit bianry number";
for(int i=0;i<8;i++)
{
cin>>ch;
num[i]=ch;
}
cout<<fun(num)<<endl;
}

程序有两处错误:
1. 第一处是求2的次方数时循环控制次数
for (int j=7-i;j>0;j--) //改为j=7-i
{
s *= 2;
}

2.第二次是字符当int数值使用时,字符0的ASCII码是48,字符1的ASCII码是49,减去相应的ASCII码才是数值0和1,或者减去字符'0'也可以。
p += (num[i]-48)*s; //注意num[i]-48

修改如下即正确:

#include<iostream.h>
int fun(char *num)
{
int p=0,s=1;
for(int i=0;i<8;i++)
{
s=1;
for (int j=7-i;j>0;j--) //注意j=7-i
{
s