|  | 
 
| 
本帖最后由 xife丶 于 2017-6-26 13:01 编辑
x
马上注册,结交更多好友,享用更多功能^_^您需要 登录 才可以下载或查看,没有账号?立即注册  
 本人自学编程有段时间了(其他语言),近期打算系统的跟着小甲鱼的C语言教程学习C语言,就在做到S1E6课后题时发现了一个奇怪的现象。
 
 以下是两种正常代码:
 
 复制代码for(i=0,sum=0;i<64,i++)
{
        temp = pow(2,i);
        sum += temp;
}//输出  18446744073709551615
/*--------分割线--------*/
i = 64, sum = 0;
while(i--)
{
        temp = pow(2,i);
        sum += temp;
}//输出  18446744073709551615
以下是两种异常代码:
 
 复制代码for(i=0,sum=0;i<64,i++)
{
        sum += pow(2,i);
}//输出  0
/*--------分割线-------*/
i = 64, sum = 0;
while(i--)
{
        sum += pow(2,i);
}//输出  1023
 望广大鱼油帮忙找找问题!
 @小甲鱼
 
 本帖最后由 ba21 于 2017-6-26 11:01 编辑 
 溢出导至的:
 
 一:
 temp = pow(2,i); //先把pow(2,i)计算出来的结果转换成unsigned long long 赋值给 temp
 sum += temp;
 二:
 sum += pow(2,i); //统一用浮点数计算,再赋值。 pow函数返回的是浮点数
 //改成 sum += (unsigned long long)pow(2,i); 即可
 | 
 
执行输出   
  |