При попытке применить отрицательный оператор (-) к числу с минимальным значением int (
), он полностью игнорируется вместо того, чтобы бросить OverflowException . Например, у меня есть следующий код: < /p>
Код: Выделить всё
int temp = int.MinValue;//-2147483648
int temp2 = -temp;//Should evaluate to 2147483648, which would throw an OverflowException, but instead is ignored and returns -2147483648
Переменной Temp присваивается значение -2147483648 , что является минимальным значением для типа int и является совершенно верным. Переменная temp2 , однако, должна выбросить OverflowException , потому что 2147483648 >
. Вместо этого отрицательный оператор ( -) игнорируется и temp2 заканчивается значением -2147483648 (
, то же самое, что и темп). Та же самая проблема возникает, если я умножаюсь на -1 вместо: < /p>
Код: Выделить всё
int temp2 = -1 * temp;//Same problem as above
Все работает, как и ожидалось, когда Temp является положительным значением или значением, больше, чем int.minvalue , и -int.minvalue дает компиляцию -Карома (как и ожидалось). Почему отрицательный оператор игнорируется вместо того, чтобы бросить OverflowException ?
Подробнее здесь:
https://stackoverflow.com/questions/794 ... t-minvalue