Почему существует один отрицательный int больше, чем положительный int?

верхний предел для любого int тип данных (кроме tinyint), всегда на единицу меньше абсолютного значения нижнего предела.

например, верхний предел для int 2,147,483,647 и ABS (нижний предел) = 2,147,483,648.

есть ли причина, почему всегда есть один отрицательный int, чем положительный int?

EDIT: изменено, так как вопрос не связан напрямую с DB's

2 ответов


типы вы предоставили подписанные целые числа. Давайте посмотрим один байт(8 бит) пример. С 1 байтом у вас есть 2^8 комбинации, которые дают вам 256 возможных чисел для хранения.

теперь вы хотите иметь одинаковое количество положительных и отрицательных чисел (каждая группа должна иметь 128).

точка 0 нет +0 и -0. Есть только один 0.

таким образом, вы в конечном итоге с диапазоном -128..-1..0..1..127.

та же логика работает для 16/32/64-bit.

EDIT:

почему диапазон составляет -128 to 127?

это зависит от того, как вы represent signed integer:

  • подписал представление величины
  • одни дополняют
  • два

этот вопрос на самом деле не связан с базами данных.

Как указывает lad2025, существует четное количество значений. Таким образом, при включении 0 будет еще одно положительное или отрицательное значение. Вопрос, который вы задаете, звучит так: "почему существует одна отрицательная ценность больше, чем положительная?"

в основном, причина-знак-бит. Одной из возможных реализаций отрицательных чисел является использование N-1 бит для абсолютного значения, а затем 0 и 1 для знакового бита. Проблема с этим подходом заключается в том, что она позволяет +0 и -0. Это нежелательно.

чтобы исправить это, компьютерные ученые разработали представление двойки-дополнения для целых чисел со знаком. (Википедия объясняет это более подробно.) В принципе, это представление поддерживает концепцию бита знака, который может быть протестирован. Но это меняет представление. Если +1 представляется как 001, то -1 представляется как 111. То есть отрицательное значение является битовым дополнением положительного значения минус один. На самом деле отрицательное всегда генерируется путем вычитания 1 и использования битового дополнения.

проблема заключается в значении 100 (за которым следует любое количество нулей). Бит знака установлен, поэтому он отрицательный. Однако, когда вы вычитаете 1 и инвертируете, он снова становится самим собой (011 --> 100). Существует аргумент в пользу того, чтобы называть это "Бесконечностью" или "не числом". Вместо этого ему присваивается наименьшее отрицательное число.