|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
#include <stdio.h>
#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);
复制代码
|
|