我认为我遇到了整数溢出问题,但我不知道如何解决它。我刚刚从 Python 和 JS 开始学习 C,这对我来说是全新的。
我在下面举了一个非常简单的例子来说明正在发生的事情。我将一个参数从主函数传递给另一个函数以乘以 3,但是当它传递时,数字会溢出。数学在主函数中进行。
#include <stdio.h>
long long calc(number){
return number*3;
}
int main(void)
{
long long digits = 1111111111111;
long long result = calc(digits);
printf("calc result: %lld\n", result);
long long mainTimes3 = digits*3;
printf("main result: %lld\n", mainTimes3);
return 0;
}
我收到错误消息
main.c:3:11: warning: type of ‘number’ defaults to ‘int’ [-Wimplicit-int]
printf 正在显示
calc result: 438711637
main result: 3333333333333
编译器警告提示了问题 - 由于您没有显式定义
number
参数的类型,编译器假定它是 int
。因此 number * 3
也是 int
,发生整数溢出。
要解决该问题,请将其显式定义为您想要的类型,
long long
:
long long calc(long long number){
/* Here ---^ */
return number*3;
}