class Program
{
static void Main(string[] args)
{
int a = Int32.MaxValue;
int b = Int32.MaxValue;
Console.WriteLine(a+b);
}
}
OUTPUT:发生-2为什么-2?为什么不是-3或-1?
溢出,但它是如何计算和找到-2结果?
class Program
{
static void Main(string[] args)
{
int a = Int32.MaxValue;
int b = Int32.MaxValue;
Console.WriteLine(a+b);
}
}
OUTPUT:发生-2为什么-2?为什么不是-3或-1?
溢出,但它是如何计算和找到-2结果?
你加入相同数量的本身,所以我会在最不期望的总和是偶数。 (奇数+奇数=偶数)
但是为什么-2?
数行是一个循环:
-1 0
-2 1
... ...
... ...
... ...
-2147483648 2147483647
添加1〜数字在效果上这圆一步顺时针服用。
添加1至2147483647(= int.MaxValue)带您-2147483648(= int.MinValue)
如果开始在2147483647并采取在圆2147483647个步骤,就结束了在-2。我们说溢出发生在int.MaxValue => int.MinValue上,它用十进制表示法,但是在二进制表示法中,溢出发生在-1(全1)=> 0(全部0的),在圆的另一侧。
无论何时您overflow
Int32.MaxValue
像Int32.MaxValue+count
的值将变为Int32.MinValue+x
。凡x = count-1
所以Int32.MaxValue+1 = -2147483648
-2147483648 + Int32.MaxValue-1 = -2
所以你的情况是-2147483648+(2147483647-1)
这是-2
你为什么喜欢-3或-1? –
@TimSchmelter我认为它只是一个普通的问题,运行时如何产生-2结果 – Domysee
@TimSchmelter我不喜欢任何东西而不是其他东西,但它似乎很奇怪,它直接找到-2作为结果。 – Lyrk