В C # я вижу, что
-1 * int.MinValue == int.MinValue
Это ошибка? Это действительно испортило меня, когда я пытался реализовать дерево поиска. В итоге я использовал (int.MinValue + 1)
, чтобы правильно отрицать его.
Это не ошибка.
int.MinValue * -1
равно 1
больше, чем int.MaxValue
. Таким образом, число возвращается к int.MinValue
.
В основном это вызвано целочисленным переполнением.
Значение этой константы:
-2,147,483,648
Значение этой константы:
2,147,483,647
Итак, -2 147 483 648 * -1 = 2 147 483 648
, что на 1
больше, чем Int32.MaxValue
.
Это не ошибка, это переполнение.
В представлении с дополнением до двух пространство представимых чисел не является симметричным. Противоположное наименьшему целому числу не может быть представлено. Вычисление переполняется и снова дает тот же номер.