Saltar al contenido

¿Por qué hay un int más negativo que un int positivo?

Esmeralda, miembro de nuestro equipo de trabajo, nos hizo el favor de escribir este artículo ya que conoce perfectamente este tema.

Solución:

Los tipos que proporcionó son enteros con signo. Veamos un ejemplo de un byte (8 bits). Con 1 byte tienes 2^8 combinaciones que le da 256 números posibles para almacenar.

Ahora quieres tener la misma cantidad de números positivos y negativos (cada grupo debe tener 128).

La cuestión es 0 no tiene +0 y -0. Sólo hay uno 0.

Entonces terminas con rango -128..-1..0..1..127.

La misma lógica funciona para 16/32/64-bit.

EDITAR:

¿Por qué el rango es -128 to 127?

depende de como tu represent signed integer:

  • Representación de magnitud con signo
  • complemento de uno
  • complemento a dos

Esta pregunta no está realmente relacionada con las bases de datos.

Como señala lad2025, hay un número par de valores. Entonces, al incluir 0, habría un valor positivo o negativo más. La pregunta que está haciendo parece ser: “¿Por qué hay un valor negativo más que un valor positivo?”

Básicamente, la razón es el bit de signo. Una posible implementación de números negativos es usar n – 1 bits para el valor absoluto y luego 0 y 1 para el bit de signo. El problema con este enfoque es que permite +0 y -0. Eso no es deseable.

Para solucionar esto, los informáticos idearon la representación de complemento a dos para los enteros con signo. (Wikipedia explica esto con más detalle). Básicamente, esta representación mantiene el concepto de un bit de signo que se puede probar. Pero cambia la representación. Si +1 se representa como 001, entonces -1 se representa como 111. Es decir, el valor negativo es el complemento bit a bit del valor positivo menos uno. De hecho, el negativo siempre se genera restando 1 y usando el complemento bit a bit.

El problema es entonces el valor 100 (seguido de cualquier número de ceros). El bit de signo está establecido, por lo que es negativo. Sin embargo, cuando restas 1 e inviertes, vuelve a ser él mismo (011 –> 100). Hay un argumento para llamar a esto “infinito” o “no un número”. En su lugar, se le asigna el número negativo más pequeño posible.

Te mostramos las reseñas y valoraciones de los lectores

Si para ti ha sido útil nuestro artículo, sería de mucha ayuda si lo compartieras con el resto entusiastas de la programación de esta manera nos ayudas a difundir esta información.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *