Ver Mensaje Individual
  #7 (permalink)  
Antiguo 08/04/2010, 05:37
Avatar de gnzsoloyo
gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 5 meses
Puntos: 2658
Respuesta: Mediumint (8) MySQL

Es un problema de representación de datos en binario (Tema 1, Bolilla 1, de Introducción a la computación).
Miralo así:

1. Los números, desde el punto de vista digital, no existen. Son sistemas de codificación de información, numérica en este caso, y los sistemas digitales sólo entienden binario. ¿Por qué binario? Bueno, no te olvides que se trata de circuitos de silicio que sólo pueden tener dos estados: Cargados o sin carga. No hay otra.

2. Si solamente entiende binario, un sistema de computación necesita codificar la información para que cada secuencia binaria sea comprendida de una determinada form, sea para almacenar, operar, calcular o mostrar. Los números tienen esa misma particularidad.

3. El problema de los binarios, es que sólo pueden representar números naturales, esto es, del cero en adelante. ¿Cómo haces entonces para representar valores negativos, que son una creación de la mente humana? Sencillo: Usas el binario para representar ambos, pero usando solamente la mitad para los positivos y la mitad para los negativos.

4. Ahora bien, del hecho de usar binarios surgen dos cosas: a) Todo valor posible es potencia de dos, y no de 10; b) El cero debe estar representado.

5. Como el cero debe estar representado, si tenemos en cuenta, por ejemplo, la longitud de un byte de 8 bits, existen 256 representaciones posibles entre el 00000000 y el 11111111. SI usamos el 00000000 para el cero, nos quedan 255 representaciones útiules... y no se pueden dividir en dos partes iguales... ¿Se entiende hasta allí?

6. Además de eso, queda por definir cómo diferenciarl los negativos de los positivos. Eso se resolvió arbitrariamente: Los binarios que tengan un cero en su bit de mayor peso serían positivos y los que tuviesen un 1 serían negativos. Así, el rango del 00000001 al 01111111 son positivos, con lo que representan los valores del 1 al 255, mientras que del 10000001 al 11111111 son negativos y representan los valores del 1 al 256.

7. Esto se cumple en todos los casos. El tipo de datos numéricos no se guarda como cifras sino como binarios y su rango está definido por la longitud en bytes que usará así, cada uno no es el doble del otro, sino uno por el otro.
A esto debes sumarle que existen números sin signo, los cuales abarcan la totalidad del rango de numeros naturales posibles para su tipo:
Veamos, por ejemplo el uso de MySQL: 11.2. Tipos numéricos

¿Se va comprendiendo la idea?
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)