Int32.MaxValue (с использованием значения, данного здесь ) составляет 2 147 483 647.
В базе 2 это: 111 1111 1111 1111 1111 1111 1111 1111
... 2 ^ 31-1. Первый бит является знаковым битом.
Если вы умножите это на себя, вы получите: 11 1111 1111 1111 1111 1111 1111 1111 0000 0000 0000 0000 0000 0000 0000 0001
Возвращаясь к исходной проблеме «почему это 1?», Поскольку Integer.MaxValue является максимальным значением, которое вызывает целочисленное переполнение. Результат усекается до 31 младшего бита, который равен 0 и плюс 1.
Редактировать: Вот учебник по двоичному умножению. Используя простой случай всех 1 с:
111
* 111
вы получите:
00111
01110
+ 11100
= 100001
Вы можете расширить это для случая Int32.MaxValue. Я сократил его до 3 цифр для краткости.
Также, как сказал другой ответ, в C # эти переполнения будут происходить по умолчанию.