马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
本帖最后由 xife丶 于 2017-6-26 13:01 编辑
本人自学编程有段时间了(其他语言),近期打算系统的跟着小甲鱼的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); 即可
|