При попытке применить отрицательный оператор (-) к числу с минимальным значением 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 . При отрицании это должно выбросить перепрофсукпцию , потому что 2147483648 не является допустимым значением для int . Вместо этого отрицательный оператор (
) игнорируется и -temp возвращает его начальное значение -2147483648 . Та же самая проблема возникает, если я умножаюсь на -1 вместо: < /p>
Код: Выделить всё
int temp2 = -1 * temp;//Same problem as above
Все работает, как и ожидалось, когда Temp является допустимым значением от int.minvalue+1 до int.maxvalue и -int.minvalue < /code> дает ошибку времени компиляции (как и ожидалось). Почему отрицательный оператор игнорируется для переменных со значением -2147483648 вместо того, чтобы бросить переполнение ?
Подробнее здесь:
https://stackoverflow.com/questions/794 ... t-minvalue