|
发表于 2018-3-27 21:40:25
|
显示全部楼层
是不是超出最大范围了,所以最终结果为0了,你可以试一下2的63次方,估计应该是正确的,
两种写法都可以,但是第二种计算方法出现奇怪问题的原因可能是存储位数的问题吧,并不太清楚。
你可以看一下这样增加几行代码的结果,或许你就明白了
- #include<math.h>
- #include<stdio.h>
- int main()
- {
- unsigned long long sum=0;
- unsigned long long sum1=0;
- unsigned long long temp;
- unsigned long long weight;
- int i;
-
- for (i=0;i<64;i++)
- {
- temp=pow(2,i);
- sum=temp+sum;/*这部分为什么不能偷懒写成sum=pow(2,i)+sum; 试了下结果是0*/
- printf("pow(2,%d)=%llu",i,pow(2,i)) ;
- sum1=pow(2,i)+sum1;
- printf("sum=%llu\n",sum1);
- };
- printf("sum=%llu\n",sum);
- return 0;
-
- }
复制代码 |
|