Это ошибка? Это действительно привинчило меня, когда я пытался внедрить дерево поиска. Я закончил тем, что использовал (int.MinValue + 1), чтобы я мог правильно отменить его.
Ответ 1
Это не ошибка.
int.MinValue * -1 имеет значение 1, превышающее int.MaxValue. Таким образом, число обтекает обратно до int.MinValue.
Итак, -2,147,483,648 * -1 = 2,147,483,648, который 1 больше, чем Int32.MaxValue.
Ответ 2
Это не ошибка, это переполнение.
В двух дополнительных представлениях пространство представимых чисел не является симметричным. Противоположность наименьшему числу не может быть представлена. Вычисление переполнения и повторное отображение того же номера.
Ответ 3
int i = -1 * int.MinValue;
Это даже не компилируется, если вы не отключите проверку:
error CS0220: The operation overflows at compile time in checked mode
Ответ 4
Нет, это не ошибка. Это характер целочисленной арифметики.
Например, возьмем подписанное значение байта, которое находится между -128 и 127.
127(0x7f)+1 = 128(0x80). Однако 0x80 на самом деле является двоичным представлением -128.
Таким образом, для байта 128(0x80) = -128(0x80)
So -128(0x80) * -1 = 128(0x80) = -128(0x80)
Ответ 5
Поместите на него отмеченную область и увидите, что "ошибка" превращается в исключение. Или попробуйте VB.NET(который, насколько я помню, проверен по умолчанию в отличие от С#).