|  | 
 
| 
#include <stdio.h>
x
马上注册,结交更多好友,享用更多功能^_^您需要 登录 才可以下载或查看,没有账号?立即注册  #include <math.h>
 
 #define NUMBER_PEEKG 25000
 
 int main()
 {
 int i;
 unsigned long long  power;
 unsigned long long sum;
 unsigned long long   weight;
 unsigned long long total;
 int sz = 0;
 i = 0;
 power = 0;
 sum = 0;
 total = 0;
 sz = sizeof(sum);
 printf("sizeof(i)=%d\n",sz);
 for(i=0;i<64;i++)
 {
 power = pow(2,i);
 sum = sum + power;
 
 total = total + pow(2,i);
 //  printf("一共%llu颗麦子。\n",sum);
 }
 
 weight = sum /NUMBER_PEEKG;
 printf("一共%llu颗麦子。\n",sum);
 printf("一共%llu颗麦子。\n",total);
 printf("共重%llu公斤。\n",weight);
 
 return 0;
 }
 
 输出结果:
 sizeof(i)=8
 一共18446744073709551615颗麦子。
 一共0颗麦子。
 共重737869762948382公斤。
 
 问题:
 求麦子总和两种加法,结果不一样?是pow()函数的返回值类型是double吗?double + unsigned 溢出?结果为何是0?
 
复制代码total = total + pow(2, i);
改为
 复制代码total = total + (unsigned long long)pow(2, i);
 | 
 |