class Program
{
static void Main(string[] args)
{
int a = Int32.MaxValue;
int b = Int32.MaxValue;
Console.WriteLine(a+b);
}
}
输出:-2
发生溢出,结果是-2,如何计算得到?
最佳答案
将其记为二进制字符串:
0111 1111 1111 1111
+0111 1111 1111 1111
--------------------
1111 1111 1111 1110
而后者正好是-2。这是因为第一个数字是 -2^31 而不是 2^31。因此,总和为 -2^31 + 2^30 + 2^29 + ... + 2^2 + 2^1 = -2
(事实上,Int32 有 32 个二进制数字,而不仅仅是 16 个)
关于c# - 为什么是-2?为什么不是-3 或-1?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33098378/