Int32.MaxValue (mit dem angegebenen Wert here) ist 2.147.483.647.
In der Basis 2, das heißt: 111 1111 1111 1111 1111 1111 1111 1111
... 2^31-1. Das erste Bit ist das Vorzeichenbit.
Wenn Sie multiplizieren Sie diese mit sich selbst, erhalten Sie: 11 1111 1111 1111 1111 1111 1111 1111 0000 0000 0000 0000 0000 0000 0000 0001
zurück zum ursprünglichen Problem von Going „warum ist es 1?“, Da Integer.MaxValue ist der Maximalwert, die einen Integer-Überlauf verursacht. Das Ergebnis wird auf die niedrigsten 31 Bits gekürzt, die alle 0 plus 1 sind.
Edit: Hier ist a tutorial auf binäre Multiplikation. einen einfachen Fall aller 1s Mit: * 111
Sie erhalten: + 11100 = 100001
Sie können dies für den Fall Int32.MaxValue erweitern. Ich habe es zur Verkürzung auf 3 Ziffern verkürzt.
Auch, wie eine andere Antwort sagte, in C# werden diese Überläufe standardmäßig auftreten.
Ist das in einem 'unchecked' Block? – Skywalker
Siehe http://stackoverflow.com/questions/2363838/when-must-we-use-checked-operator-in-c –