是否可以计算溢出后的值?

Is it possible to calculate the value after overflow?

我明白如果INT_MAX加1会溢出,我们会得到负最大值。它连接在一个循环中。在下面的代码中,我可以计算溢出后的值吗?

#include<bits/stdc++.h>
using namespace std;
int main()
{
    int a = 100000;
    int b = 100000;
    int c = a*b;
    cout<<c;
    return 0;
}

输出: 141006540​​8

是否可以计算出这个数字。 在这种情况下,内部乘法是如何发生的

I understand that if 1 is added to INT_MAX it will overflow and we will get the negative maximum.

你误会了。如果 INT_MAX 加 1,则程序的行为未定义。

can I calculate the value after overflow.

有符号整数溢出后,程序的行为是不确定的,所以做任何事情都是没有意义的。


如果您要使用无符号整数,那么任何运算的结果都将与“数学上正确”的结果模 M 一致,其中 M 是可表示值的数量,即 max+1。

例如,如果 unsigned 是 32 位,则 100'000u * 100'000u 将是 10'000'000'000,这与 1'410'065'408 模 M=4'294 一致'967'295。你可以通过重复减去或添加 M 直到结果是可表示的来找到可表示的全等值。

您可能熟悉的另一个模运算示例是时钟。如果从午夜开始将 24 小时制加 123 小时,那么它会显示什么时间?如果将 4'294'967'295 小时时钟加上 10'000'000'000 小时,它会显示什么时间?