新人求助,关于舍罕王的问题
本帖最后由 1762075716 于 2017-7-10 22:43 编辑我写的代码如下
#include <stdio.h>
#include <math.h>
int main()
{
int i;
unsigned long long sum = 0,temp,weight;
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;
}
但是编译时却有这样一堆warning
但是打印出来的结果和小甲鱼的结果是一样的,请问这是怎么回事呢 注意里面类型的定义,无符号长整形64位不同的编译器可能不同;还有就是用temp =pow(2,i); 这里,要先转换成无符号长整形然后在赋值给temp
下面是vc++6.0的
#include <stdio.h>
#include <math.h>
int main()
{
int i;
unsigned __int64 sum = 0,temp,weight;
for(i = 0;i < 64; i++){
temp =(unsigned __int64)pow(2,i);
sum = sum + temp;
}
weight = sum / 25000;
printf("舍罕王应该给予达依尔%llu粒麦子!\n",sum);
printf("如果每25000粒麦子为1kg,那么应该给%llu公斤麦子\n",weight);
return 0;
} 有些编译器不支持 %ll 宽度限制……{:10_266:} 小甲鱼 发表于 2017-7-10 23:01
有些编译器不支持 %ll 宽度限制……
那为什么还可以正常打印呢{:10_257:} 本帖最后由 超凡天赐 于 2017-7-11 10:09 编辑
我认为这是国际标准的问题,你用的是vc6.0++,98年的软件,怎么可能去支持一个99年的标准。long long型在99标准中才出现。要想知道,请查看99国际标准的Annex F (normative) IEC 60559 floating-point arithmetic,在§6.4.4.1Language63页面(国际标准页码我不知道它是什么逻辑{:10_247:} )。这里我把图片放上来:。
至于你为什么能打印出来,你看看你打印出来的是什么?你直接打印出%llu,并不是数字,而且警告里说了warning: too many arguments for format。
什么意思?说明你的形参要比格式化符号要多。编译器识别不了,如果想要识别,你可以用一用vs2017,那个对c11支持的比较好。 小甲鱼 发表于 2017-7-10 23:01
有些编译器不支持 %ll 宽度限制……
98年的软件怎么可能去支持99年的标准{:10_247:} 超凡天赐 发表于 2017-7-11 10:07
98年的软件怎么可能去支持99年的标准
{:5_106:} 必须点个赞,回答这么详细!
页:
[1]