test主程序调用,做了一个20的阶乘,call中,sum值输出正常,test中返回的sum值不对,是什么原因?
test:
#include <stdio.h>
#include <stdbool.h>
/定义两个全局变量/
int x = 1;
int y = 2;
long long sum = 1;
int n = 20;
int num;
bool flag;
int addtwonum();
int lab();
int main(void)
{
int result;
result = addtwonum();
sum=lab();
printf("result : %d\n", result);
printf("sum : %lld\n", sum);
return 0;
}
call:
#include <stdio.h>
#include <stdbool.h>
extern long long sum;
extern int n, num;
extern bool flag;
int lab()
{
int num = n;
while (!flag)
{
sum = sum * (num--);
if(num==1)
{
flag = true;
}
}
printf("%d的叠乘值为 %lld\n", n, sum);
return sum;
}
20的叠乘值为 2432902008176640000
result : 3
sum : -2102132736
sum返回值与实际不符
怀疑是数据溢出,但是return返回值也有数据范围吗?