有关unsigned 问题
#include <stdio.h>#include <math.h>
int main()
{
int i=0;
unsignedlong longsum=0;
unsigned long long result;
for(i;i<64;i++)
sum = sum +pow(2,i);
result = sum/25000;
printf("%llu",result);
return 0;
}
这样子的结果为什么是0?跟用temp= pow(2,i)有什么区别? #include <stdio.h>
#include <math.h>
int main()
{
unsigned long long sum = 0;
unsigned long long result;
for(int i = 0; i < 64; i++)
sum = sum + (unsigned long long)pow(2, i); // <---------- 注意这里 ----------
result = sum/25000;
printf("%llu", result);
return 0;
} 傻眼貓咪 发表于 2022-1-11 21:40
请问那里改是因为什么哇? 1449620085 发表于 2022-1-12 10:09
请问那里改是因为什么哇?
因为 pow() 返回类型 double,而我们要的是 unsigned long long 傻眼貓咪 发表于 2022-1-12 10:22
因为 pow() 返回类型 double,而我们要的是 unsigned long long
int main()
{
unsigned long long sum = 0;
unsigned long long temp;
unsigned long long weight;
int i;
for (i=0; i < 64; i++)
{
temp = pow(2, i);
sum = sum + temp;
}
那这里的pow不加unsigned long long 是因为前面的temp被定义了数据类型吗? 1449620085 发表于 2022-1-12 10:54
int main()
{
unsigned long long sum = 0;
也可以这么说{:10_254:} 傻眼貓咪 发表于 2022-1-12 10:22
因为 pow() 返回类型 double,而我们要的是 unsigned long long
那就是说数据类型不同的进行相加结果会等于0?? 傻眼貓咪 发表于 2022-1-11 21:36
#include <stdio.h>
#include <math.h>
int main()
{
int i=0;
long longsum=0;
long long result;
for(i;i<64;i++)
sum = sum +(long long)pow(2,i);
result = sum/25000;
printf("%lld",result);
return 0;
}
这样我把unsigned 去掉,为什么结果也是等于0呢? waixiong 发表于 2022-1-23 15:04
那就是说数据类型不同的进行相加结果会等于0??
不是的,是因为数据太大了,只能用 unsigned long long 类型 傻眼貓咪 发表于 2022-1-23 15:16
不是的,是因为数据太大了,只能用 unsigned long long 类型
那为啥结果等于0嘞? waixiong 发表于 2022-1-23 17:00
那为啥结果等于0嘞?
因为数据太大了,溢出吧:#include <stdio.h>
#include <math.h>
int main()
{
int i = 0;
long long sum = 0;
long long result;
for(i; i < 64; i++){
sum = sum +(long long)pow(2, i);
printf("第%d次:%lld\n", i, sum); // 打印每次循环结果
}
result = sum/25000;
printf("%lld", result);
return 0;
}输出结果:第0次:1
第1次:3
第2次:7
第3次:15
第4次:31
第5次:63
第6次:127
第7次:255
第8次:511
第9次:1023
第10次:2047
第11次:4095
第12次:8191
第13次:16383
第14次:32767
第15次:65535
第16次:131071
第17次:262143
第18次:524287
第19次:1048575
第20次:2097151
第21次:4194303
第22次:8388607
第23次:16777215
第24次:33554431
第25次:67108863
第26次:134217727
第27次:268435455
第28次:536870911
第29次:1073741823
第30次:2147483647
第31次:4294967295
第32次:8589934591
第33次:17179869183
第34次:34359738367
第35次:68719476735
第36次:137438953471
第37次:274877906943
第38次:549755813887
第39次:1099511627775
第40次:2199023255551
第41次:4398046511103
第42次:8796093022207
第43次:17592186044415
第44次:35184372088831
第45次:70368744177663
第46次:140737488355327
第47次:281474976710655
第48次:562949953421311
第49次:1125899906842623
第50次:2251799813685247
第51次:4503599627370495
第52次:9007199254740991
第53次:18014398509481983
第54次:36028797018963967
第55次:72057594037927935
第56次:144115188075855871
第57次:288230376151711743
第58次:576460752303423487
第59次:1152921504606846975
第60次:2305843009213693951
第61次:4611686018427387903
第62次:9223372036854775807
第63次:-1
0最后一次 sum 溢出了 傻眼貓咪 发表于 2022-1-23 17:12
因为数据太大了,溢出吧:输出结果:最后一次 sum 溢出了
谢谢你! waixiong 发表于 2022-1-23 17:45
谢谢你!
不客气{:5_109:}
页:
[1]