-1 * int.MinValue == int.MinValue ?? Это ошибка?

В C # я вижу, что

-1 * int.MinValue == int.MinValue

Это ошибка? Это действительно испортило меня, когда я пытался реализовать дерево поиска. В итоге я использовал (int.MinValue + 1) , чтобы правильно отрицать его.

47
задан jjnguy 2 September 2010 в 00:58
поделиться

2 ответа

Это не ошибка.

int.MinValue * -1 равно 1 больше, чем int.MaxValue. Таким образом, число возвращается к int.MinValue.

В основном это вызвано целочисленным переполнением.

Int32.MinValue:

Значение этой константы: -2,147,483,648

Int32.MaxValue:

Значение этой константы: 2,147,483,647

Итак, -2 147 483 648 * -1 = 2 147 483 648, что на 1 больше, чем Int32.MaxValue.

58
ответ дан 26 November 2019 в 19:44
поделиться

Это не ошибка, это переполнение.

В представлении с дополнением до двух пространство представимых чисел не является симметричным. Противоположное наименьшему целому числу не может быть представлено. Вычисление переполняется и снова дает тот же номер.

9
ответ дан 26 November 2019 в 19:44
поделиться
Другие вопросы по тегам:

Похожие вопросы: