c程序有句不懂啊?

来源:百度知道 编辑:UC知道 时间:2024/05/17 20:28:28
计算1+2+4+8+....1024/
main()
{
int i,j=0;
i = 1;
while(i <= 1024)
{
j+=i;
i*=2;
}
printf("%d",j);

getch();
}
这里应该 当i=1024时,i*=2那不就是2048了吗?我想这晨i<=1024应该是<=512
给我说下原因啊.
i等于1024的时候, i*=2为2048, 但是while的条件就不满足了, 所以下一次循环就不做了, 但是这次i*2=2048这人还做啊.是吧.但是是加到1024啊.下次循环不做了是对啊,还是没给我说啊,不是这次还执行吗?执行的话就加到2048了啊.但是结果对啊,是怎么回事啊?

没问题的啊, i等于1024的时候, i*=2为2048, 但是while的条件就不满足了, 所以下一次循环就不做了.

补充: 还是没问题啊, 这个程序不是要实现
1 + 2 + 4 + 8 + .... + 1024么?
正好j加到了1024, 没有加2048啊, 满足要求

再补充:): 先做j+=i, 这时i还是1024, 作完了以后再把i乘以了2, OK, 这以后i变成了2048, 但又有什么关系呢? 反正又不会加到j上面去.

当i==1024的时候
while(i<=1024)还是成立的
所以执行
{
j += i; //将1024累加到原和上
i *= 2; //i变为2048
}
下次while判断的时候i==2048,所以不进入循环,j+=i也就没有执行。