读书人

把二进制变换十进制循环的地方交换位

发布时间: 2013-09-28 10:01:20 作者: rapoo

把二进制转换十进制,循环的地方交换位置为什么出错?

int main(){

cout<<"请输入8位二进制的数:"<<endl;
char ch;
int i=7,sum=0;

for(;i>=0;i--) {

cin>>ch;
if(ch=='1')
sum += power(2,i);
}
cout<<"转换后的十进制数位:"<<sum<<endl;
return 0;
}

double power(double x,int n){
double r=1.0;
while(n--){
r *=x;
}


return r;
}

如果for循环改为这样为什么出错?
for(;i>=0;) {
i--;
cin>>ch;
if(ch=='1')
sum += power(2,i);
}
二进制 power 循环出错
[解决办法]
一进入函数就执行i-- i = 6,5,4,3,2,1,0 只换算了7位
[解决办法]
i每次循环进来就 进行了自减一次了!

// 方法1
for(;i>=0;)
{

cin>>ch;
if(ch=='1')
sum += power(2,i);
i--;
}

//方法2
int i = 8;
for(;i>0;)
{
i--;
cin>>ch;
if(ch=='1')
sum += power(2,i);
}



[解决办法]
你的方法2 像你输入(0000 0011)
他最后一次循环是power(2,-1),while循环当然跳不出
[解决办法]
楼主你没弄明白 for(;i>=0;i--) 是怎么执行的。。。

这条语句,先执行i>=0,然后执行循环体,再执行的是 i--; 在判断i>=0是否为真,然后再执行循环体,再执行的是 i--;

如果是for(;i>=0;) { i--;
执行的顺序就变了,先执行i>=0,然后执行循环体,相对于上一个语句,这个i--是在上个循环体之前执行。




[解决办法]
引用:
Quote: 引用:

在C语言中,非零数表示真(true),零表示假(false)。
while(n) 如果n为负数时,while条件为真
但是我的判断条件不是while(n--)啊,而是while(n>=0)
当n==-1时,while里面是(false).

double power(double x,int n){
double r=1.0;
while(n--){
r *=x;
}

这不是你自己写的吗
难道我眼花?

读书人网 >C语言

热点推荐