Números






Ciencias de la Computación III
Diego José Figueroa

Sistemas de numeración






¿Qué sistema de numeración utilizan los humanos?

Sistemas de numeración






¿Qué sistema de numeración usan las computadoras?

Sistemas de numeración


  • Base 10
    • 10 dígitos (símbolos)
    • 0 - 9

  • Base 2
    • 2 dígitos (símbolos)
    • 0, 1

¿Cómo pasamos de otra 

base a base 10?


El valor de un número es independiente de la base


Base 2


  • Bit
    • Dígito binario
    • 8 bits forman un char
    • 16 bits forman un short
    • 32 bits forman un entero

  • Siempre tenemos un número finito de bits para representar un valor.




¿Qué implica tener un 

número finito de bits?

Cantidad de bits


  • Limita la cantidad de valores que se pueden representar.

  • Por ejemplo, con 8 bits:
    • Número más pequeño: 0000 0000 = 0
    • Número más grande:    1111 1111 = 255
    • 255 = 2^8 -1

  • En general, el valor más grande representable con n bits es:


2^n -1

El círculo numérico


  • Es como una recta numérica, cerrada sobre sí misma.
  • Toda la matemática de computadora funciona de esta manera, dando vuelta cuando se terminan los bits.

Hexadecimal


  • Una forma fácil de representar números binarios.
  • 16 dígitos:
    • 0 - 9 más A - F
    • Usualmente se escribe 0xNUMERO
      • Este convenio se cumple en C, Java, MIPS, etc.

  • Ejemplo
    • 0x20

0x20 = 2x16^1 + 0x16^0 = 32

Hexadecimal


  • ¿Por qué hex es más fácil que binario?
    • 1 dígito hex se traduce a 4 dígitos binarios
    • Dado que 16 es igual a 2^4
    • Esto hace que sea muy fácil pasar de hex a binario, y viceversa.

  • Ejemplo

0x3A  ->  0011 1010
0xFF  ->  1111 1111
0x5B  ->  0101 1011


Hexadecimal


  • También funciona a la inversa  (haciendo grupos de 4, desde la izquierda).

11001010111111101011101010111110

1100  1010  1111  1110  1011  1010  1011  1110

   C        A        F         E        B         A        B        E 

0xCAFEBABE

¿Qué hacemos con números negativos?




  • Hasta ahora, sólo podemos representar números positivos.

  • Necesitamos alguna forma de representar números negativos.

Signo/Magnitud


  • Primera implementación, la más simple.

  • Utilizamos el bit más significativo para indicar el signo del número
    • Si el bit es 1, es un número negativo.
    • Si el bit es 0, es un número positivo.

  • El resto de los bits indican la magnitud del número.
  • Ejemplo

1000 0011   ->    -3
0000 0011   ->     3

Signo/Magnitud


  • Veamos cómo queda el círculo numérico

Signo/Magnitud


  • Tenemos varios problemas!

  • Tenemos 2 ceros! 0 y -0.

  • Los números negativos están en sentido contrario!

  • Necesitamos otro método...

Sumar o restar un 'offset'


  • Bajo este método, a todos los números se les suma un 'offset' implícito.



  • A este offset, se le llama bias.
  • Con un bias de -3
000  -> -3
011  ->  0
111  ->  4

Bias de -3


Bias


  • Primer problema, el 0 está corrido!

  • Además, debemos remover el bias para hacer operaciones matemáticas.

Complemento a 1


  • Para representar un número negativo:
    • Invertimos todos los bits del equivalente positivo.
    • Es decir, cambiar 1 por 0, y 0 por 1.

  • Para conocer la magnitud del número, se deben invertir los bits de nuevo.

  • A esa inversión de bits, se le llama complemento.
  • Ejemplo

 5    ->   0101
-5    ->   1010

Complemento a 1


Complemento a 1


  • De nuevo, tenemos 2 ceros!
  • Pero, los negativos están en el orden correcto.
  • Cero está en el lugar correcto.
  • Los números positivos no se ven afectados.

Complemento a 2


  • El complemento a 2 de un número es igual al complemento a 1 del número y sumarle 1.

  • A esto se le llama inverso aditivo.


Complemento a 2


Complemento a 2


  • Sólo tenemos 1 cero.
  • Negativos están en el orden correcto.
  • Cero está en el lugar correcto.
  • Los números positivos no se ven afectados.

Representemos números 

de 8 bits (con complemento a 2)


14 ->  0000 1110
-14 ->  1111 0010

----------------------------------------
0000 1110    // +14
1111 0001    //   c1
1111 0010    //   +1

¿Funcionará a la inversa?


-14 = 1111 0010
---------------------------------------
1111 0010   // -14
0000 1101  //  c1
0000 1110  //  +1
                   = 14

  • Por lo que -(-x) = x
Made with Slides.com