mr6923612 发表于 2020-4-4 02:52:38

取值范围程序的问题

#include <stdio.h>
#include <math.h>

int main()
{
      long long sum=0;
      long long temp;
      long long weight;
      int i;

      for (i=0; i < 64; i++)
      {
                temp = pow(2, i);
                sum = sum + temp;
      }

      weight = sum / 25000;

      printf("舍罕王应该给予达依尔%llu粒麦子!\n", sum);
      printf("如果每25000粒麦子为1kg,那么应该给%llu公斤麦子!\n", weight);

      return 0;
}


舍罕王应该给予达依尔18446744073709551615粒麦子!
如果每25000粒麦子为1kg,那么应该给0公斤麦子!

请问为什么sum可以读出 weight读不出测试过赋值weight=0无效 如果不赋值sum两个都读不出 求大家帮助 谢谢

BngThea 发表于 2020-4-4 08:05:20

编译器的原因吧
sum需要初始化为0才能进行累加
weight是通过sum计算出来的

墨羽岚 发表于 2020-4-4 09:26:46

BngThea 发表于 2020-4-4 08:05
编译器的原因吧
sum需要初始化为0才能进行累加
weight是通过sum计算出来的

他的sum赋过初值0了
我这里连long long 都不认可{:10_266:}

mr6923612 发表于 2020-4-4 11:12:40

BngThea 发表于 2020-4-4 08:05
编译器的原因吧
sum需要初始化为0才能进行累加
weight是通过sum计算出来的

主要是及时sum赋值过0 sum可以读出来 后面的weight还是读0

BngThea 发表于 2020-4-4 11:18:45

mr6923612 发表于 2020-4-4 11:12
主要是及时sum赋值过0 sum可以读出来 后面的weight还是读0

所以我说可能是编译器的问题

mr6923612 发表于 2020-4-4 12:32:07

BngThea 发表于 2020-4-4 11:18
所以我说可能是编译器的问题

后面会有更多的语句能解决这个问题不会让他超出范围是吗?

BngThea 发表于 2020-4-4 12:45:06

mr6923612 发表于 2020-4-4 12:32
后面会有更多的语句能解决这个问题不会让他超出范围是吗?

是的,修改数据类型,比如double
页: [1]
查看完整版本: 取值范围程序的问题