unos y ceros

Representación binaria de los números.

Los ordenadores, internamente, almacenan la información en secuencias de unos y ceros. Para un ordenador no existen los caracteres, ni los números reales, ni los números enteros y mucho menos los tipos struct o union.

Para un PC, la información se almacena como cadenas de  ceros y unos, (hay voltaje o no hay voltaje) en la memoria. Como consecuencia de esto, sólo puede interpretar números. 

Con unos y ceros sólo tenemos dos estados y si debemos interpretar números con  dos estados, la cantidad es muy limitada.

     bit          valor
       0             0
       1             1

Con cuatro bit el mayor número que se puede representar es 15, que son un total de 16 valores diferentes.

La cantidad mínima que direccionamos en memoria son 8 bit.

          8 bit                  valor
       00000000                0
        11111111            255

A un conjunto de 8 bits lo denominamos byte.
En un byte la cantidad de números a representar es bastante limitada, 256 valores diferentes, pero es suficiente para representar los caracteres del alfabeto anglosajón. y aún sobra, valores que se han destinado para uso de otros caracteres.


Los caracteres imprimibles comienzan en 01000000 (32 en decimal) el carácter espacio. Internamente un char es un entero de 8 bits, por lo que se, además de representar un carácter, se pueden sumar valores comprendidos en el rango de 0 a 255.

Los bytes se agrupan en palabras (la longitud de una palabra depende de la máquina, en un principio eran de 16 bits, 2 bytes).

Con dos bytes los números que se pueden representar son del 0 al 65535
Por cada bit que añadimos al paquete se duplica la cantidad de valores a representar.

Conversión de decimal a binario.

Cada bit sólo puede tener dos valores, 1 ó 0, por lo que, según la posición del bit en el byte su valor será de 2n siendo n la posición dentro del byte.


2n1286432168421
Valor de n76543210

Para saber el valor decimal de un número binario, sólo tenemos que sumar cada uno de los valores según su posición.

Ej.-

          0 1 1 0 0 0 0 0 b    es    25 + 26 = 32 + 64 = 96
Sólo se tienen en cuenta aquellos bits que están a 1.

y ¿Cómo pasamos de decimal a binario?

La respuesta es dividiendo.

Se toma el valor que queremos cambiar de base, por ejemplo el 96 y se divide entre dos, y nos quedamos el resto. El cociente de la división lo volvemos a dividir entre dos y nos volvemos a quedar con el resto y así hasta que el cociente sea cero.

        96 : 2 = 48   resto = 0                                               bit de menor peso

               48 : 2 = 24   resto = 0

                       24 : 2 = 12   resto = 0

                               12 : 2 = 6    resto = 0
         
                                         6 : 2 = 3 resto = 0

                                              3 : 2 = 0   resto = 1

                                                    1 : 2 = 0     resto = 1            

                                                             0 : 2 = 0     resto = 0      bit de mayor peso

Ya están todas las divisiones y tenemos todos los restos, que es lo que nos interesa. Como se puede observar el último resto es el bit de mayor peso y el primer resto (96 : 2 = 48    resto = 0) es el bit de menor peso, por lo que a la hora de colocar los bit lo haremos de izquierda a derecha, empezando por el último resto obtenido:

          0 1 1 0 0 0 0 0 b

Con esto podemos representar número enteros positivos, pero no los negativos ni los números reales.

Representación interna de los número enteros negativos.

Complemento a dos.

Antes de explicar que es el completo a dos, empezaremos por el complemento a uno.

El complemento a uno es, cambiar cada bit de un byte por su complemento, (contrario) donde tengamos un uno ponemos un cero y al revés, donde tengamos un cero ponemos un uno.

De esta manera  el número 0 1 1 0 0 0 0 0 b (96 decimal) su complemento a uno es:

          1 0 0 1 1 1 1 1

Ya sabemos como se realiza el complemento a uno de cualquier número entero positivo.

El complemento a dos es, el complemento a uno más 1.

Si el complemento a uno de 0 1 1 0 0 0 0 0 es 1 0 0 1 1 1 1 1 el complemento a dos es

        1 0 0 1 1 1 1 1 + 1 = 1 0 1 0 0 0 0 0

Si sumamos
          0 1 1 0 0 0 0 0
          1 0 1 0 0 0 0 0 +
        --------------------
          0 0 0 0 0 0 0 0

Obtenemos 0, con lo que deducimos que el complemento a dos de un número binario es su negativo.