【发布时间】:2021-12-04 04:09:07
【问题描述】:
signed integer overflow: 2147483647为什么会抛出:
运行时错误:有符号整数溢出:2147483647 - -100 无法在此代码的“int”类型中表示
temp = abs(nums[i]+nums[j]+nums[k]-target);
if(temp < abs(minTarget-target)){
minTarget = nums[i]+nums[j]+nums[k];
}
?
【问题讨论】:
-
int具有最大可表示值。在您的特定环境中,2147483647等于或低于该最大值,但2147483647 + 100高于该最大值。 -
请显示minimal reproducible example。你用的是c还是c++?
-
2147483647是 32 位int通常可以表示的最大值 - 添加100将超过该类型可以表示的值,从而导致溢出。这大概就是您看到的错误消息所代表的内容。有符号整数类型的溢出具有未定义的行为。请记住,尽管您的编译器/系统可能支持 32 位int,但标准仅保证int可以表示-32767和32767之间的值。