Skip to Content
Organización del ComputadorSistemas de Numeración

Sistemas de Numeración

Números Decimales y Binarios

Para seguir con este tema, es útil repasar esta sección: Desarrollos en base b (MD1)

El sistema numérico decimal es base 1010, porque usa 1010 dígitos y los coeficientes se multiplican por potencias de 1010.
El sistema binario es base 22, porque usa 22 dígitos (los coeficientes solo pueden ser 010 \lor 1).
Cada coeficiente aja_j se multiplica por 2j2^j.

Un número con punto decimal se representa con una serie de coeficientes:

an  a4  a3  a2  a1  a0  .a1  a2  a3  an  10nan+104a4+103a3+102a2+101a1+100a0+101a1+102a2+103a3++10nan\begin{aligned} &a_{n} \; a_{4} \; a_{3} \; a_{2} \; a_{1} \; a_{0} \; .a_{-1} \; a_{-2} \; a_{-3} \; \ldots a_{-n} \; \\ &10^{n}a_{n} + 10^{4}a_{4} + 10^{3}a_{3} + 10^{2}a_{2} + 10^{1}a_{1} + 10^{0}a_{0} + 10^{-1}a_{-1} + 10^{-2}a_{-2} + 10^{-3}a_{-3} + \ldots + 10^{-n}a_{-n} \\ \end{aligned}

Donde ana_{n} es el coeficiente más grande y ana_{-n} es el coeficiente más pequeño.
El punto decimal se usa para separar la parte entera de la parte fraccionaria.

El sistema binario sería:

2nan+24a4+23a3+22a2+21a1+20a0+21a1+22a2+23a3++2nan\begin{aligned} &2^{n}a_{n} + 2^{4}a_{4} + 2^{3}a_{3} + 2^{2}a_{2} + 2^{1}a_{1} + 2^{0}a_{0} + 2^{-1}a_{-1} + 2^{-2}a_{-2} + 2^{-3}a_{-3} + \ldots + 2^{-n}a_{-n} \\ \end{aligned}

Un ejemplo de número decimal a binario es 13.62=(1101)213.62 = (1101)_{2}. En lugar de denominar a los binarios como binary digits se les llama bits.

Podemos realizar operaciones aritméticas con números binarios de la siguiente forma:

  1101+101111000  11011011  0010  1101×    101    11010000    1101  1000001\begin{aligned} &\quad \; 1101 \\ &+1011 \\ &\quad \overline{11000} \\ &\\ &\quad \; 1101 \\ &-1011 \\ &\quad\overline{\;0010} \\ & \\ &\quad \; 1101 \\ &\times \;\; 101 \\ &\quad \overline{\;\; 1101} \\ &\quad 0000 \\ &\;\; 1101 \\ &\overline{\; 1000001} \\ \end{aligned}

Como no es posible 1+1=21+1=2 en binario, se deja un 00 y se lleva un 11 al siguiente coeficiente.

Existen distintos registros (tamaños de bits) para representar números binarios, como los bytes (88 bits).

Conversiones de base numérica

La conversión de una fracción decimal a un número en base rr, pero en lugar de dividir se multiplica por rr y se toma la parte entera.

Ejemplo: Convertir 0.68750.6875 a binario y a base 88.

0.6875×2=1+0.375    a1=10.375×2=0+0.75    a2=00.75×2=1+0.5    a3=10.5×2=1+0    a4=1\begin{aligned} 0.6875 \times 2 &= 1 + 0.375 &\implies a_{-1} = 1 \\ 0.375 \times 2 &= 0 + 0.75 &\implies a_{-2} = 0 \\ 0.75 \times 2 &= 1 + 0.5 &\implies a_{-3} = 1 \\ 0.5 \times 2 &= 1 + 0 &\implies a_{-4} = 1 \\ \end{aligned}

Tenemos que 0.6875=(0.1011)20.6875 = (0.1011)_2.

0.6875×8=5+0.5    a1=50.5×8=4+0    a2=4\begin{aligned} 0.6875 \times 8 &= 5 + 0.5 &\implies a_{-1} = 5 \\ 0.5 \times 8 &= 4 + 0 &\implies a_{-2} = 4 \\ \end{aligned}

Tenemos que 0.6875=(0.54)80.6875 = (0.54)_8.

Números Octales y Hexadecimales

Las conversiones entre binario, octal y hexadecimal son fundamentales en las computadoras, ya que 23=824=162^3 = 8 \land 2^4 = 16. Por lo que cada dígito en octal representa 33 bits y cada dígito en hexadecimal representa 44 bits.

La siguiente tabla muestra los núemros con diferente base:


DecimalBinarioOctalHexadecimal
00000000000000
11000100011111
22001000102222
33001100113333
44010001004444
55010101015555
66011001106666
77011101117777
8810001000101088
9910011001111199
1010101010101212AA
1111101110111313BB
1212110011001414CC
1313110111011515DD
1414111011101616EE
1515111111111717FF

Podemos hacer conversiones de base numérica acomodando los dígitos de forma correspondiente.

Ejemplo: Convertir (1101.1011)2(1101.1011)_2 a octal y hexadecimal.

(1101.1011)2=(001  101  .001  011)2=(15.13)8=(D.5)8(1101.1011)2=(D.B)16\begin{aligned} (1101.1011)_2 &= (001 \; 101 \; .001 \; 011)_2 = (15.13)_8 = (D.5)_8 \\ &\\ (1101.1011)_2 &= (D.B)_{16} \end{aligned}

Puede darse el caso que el número no sea exactamente divisible por 33 o 44, por lo que se agregan ceros a la izquierda (en la parte entera) o a la derecha (en la parte fraccionaria) para completar el número.

Ejemplo: Expresar (11010011011011)2(11010011011011)_2 y (0.101101)2(0.101101)_2 en hexadecimal.

(11010011011011)2=1011  0011  0110  11=1011  0011  0110  0011=(B36B)16(0.101101)2=1011  01=1011  0100=(0.B4)16\begin{aligned} (11010011011011)_2 &= 1011 \; 0011 \; 0110 \; 11 = 1011 \; 0011 \; 0110 \; 0011 = (B36B)_{16} \\ &\\ (0.101101)_2 &= 1011 \; 01 = 1011 \; 0100 = (0.B4)_{16} \end{aligned}

Complementos

Los complementos son una forma de representar números negativos.
Dado un número NN en base rr con nn dígitos, el complemento a (r1)(r - 1) es (rn1)N(r^n - 1) - N.
En el caso de los binarios r=2r1=1r = 2 \land r - 1 = 1, por lo que el complemento a 11 es (2n1)N(2^n - 1) - N.

El complemento a 11 se obtiene cambiando los 00 por 11 y los 11 por 00.
El complemento a 22 se obtiene sumando 11 al complemento a 11

Ejemplo:

El complemento a 11 de (1101)2(1101)_2 es (0010)2(0010)_2.
El complemento a 22 de (1101)2(1101)_2 es (0011)2(0011)_2.

En la definición anterior se considera que el número no lleva punto. De ser el caso, se quita temporalmente para formar el complemento a 11 y luego se vuelve a colocar en su lugar.

Ejemplo:

El complemento a 11 de (1101.1011)2(1101.1011)_2 es (0010.0100)2(0010.0100)_2.


Podemos expresar un número decimal negativo a binario (negativos en complemento a 22):

Ejemplo: Convertir 63-63 a binario, donde su tamaño de registro es de 88 bits.

Primero calculamos el valor absoluto de 6363 en binario y agregamos ceros a la izquierda para completar los 88 bits.

63=(00111111)263 = (00111111)_2

Ahora obtenemos el complemento a 22 de (00111111)2(00111111)_2.

(00111111)2    (11000000)2+1    (11000001)2\begin{aligned} (00111111)_2 &\implies (11000000)_2 \\ +1 &\implies (11000001)_2 \end{aligned}

Por lo que 63=(11000001)2-63 = (11000001)_2.

Si quisiéramos aumentar el tamaño del registro, al ser negativo, se agregan unos a la izquierda.


Para hacer una resta entre dos números binarios, es más sencillo hacer el complemento a 22 del sustraendo y sumar ambos números.

Números Flotantes

Los números flotantes son una representación de números reales extremadamente grandes o pequeños en notación científica. Este formato puede ser de precisión simple o doble, dependiendo de la cantidad de bits que se usen. En lenguajes como C se usan los tipos float y double para representarlos.

Su formato sería el siguiente:

x=(1)s×(1+F)×2EBx = (-1)^{s} \times (1 + F) \times 2^{E - B}
  • ss corresponde a un bit de signo.
  • FF es la mantisa, un número fraccionario. Si es de precisión simple, se usan 2323 bits y si es de precisión doble, se usan 5252 bits.
  • EE es el exponente, un número entero. Si es de precisión simple, se usan 88 bits y si es de precisión doble, se usan 1111 bits. Su valor se calcula como E=e+BE = e + B, donde ee es el valor del exponente y BB es el sesgo.
  • El sesgo es un número que se le suma al exponente para que no sea negativo. En precisión simple, B=127B = 127 y en precisión doble, B=1023B = 1023.

Por ejemplo, el número 13.625-13.625 en precisión simple sería:

13.625=1101.101113.625 = 1101.1011

Para seguir el formato, necesitamos desplazar el .. cuantas veces sea necesario para solo tener una unidad entera. En este caso, tres veces     e=3\implies e=3

=1.1011011×23=1.1011011×2(130127)\begin{aligned} &= 1.1011011 \times 2^3 \\ &= 1.1011011 \times 2^{(130 - 127)} \end{aligned}

Tenemos que:

  • s=1s = 1 (es negativo)
  • F=10110110000000000000000F = 10110110000000000000000 (agregamos ceros para llegar a 2323 bits)
  • E=130=(10000110)2E = 130 = (10000110)_2

Sumando todos los bits, tenemos 3232 bits. Agrupando s,E,Fs, E, F (en ese orden) de a cuatro podemos dar con el número hexadecimal 0xC15A00000xC15A0000

Infinitos y NaN

En los números flotantes, existen valores especiales como el infinito y el NaN (Not a Number).

El ±\pm \infty se representa con exponente =1111= 111 \ldots 1, y mantisa =0000= 000 \ldots 0.
Este se utiliza cuando un número excede el rango de representación.

El NaN se representa con exponente =1111= 111 \ldots 1, y mantisa char"338=0000\not=000 \ldots 0.
Este se utiliza cuando se realiza una operación inválida, como dividir por 00.

Última vez actualizado el