Skip to content

B_Numeros binarios con Signo

José Fernando Picó Antolí edited this page Jan 16, 2018 · 5 revisions

Números Binarios con signo

Para poder interpretar si un número es positivo o negativo, se debe conocer con anticipación el tipo de representación que se está usando.

Podemos tener varias formas de representar números con signo:

  1. Convención "Signo-Magnitud". El número tiene una magnitud y el signo es representado con un 0 (+) o un 1 (-) en el bit más significativo ( a la izquierda).
  2. Convención del "Signo por Complemento (Complemento a 1 o Complemento a 2)" donde se representan los números negativos con el complemento del número positivo.
Ejemplo, para representar el -11 con 8 bits se puede hacer siguiendo las distintas  
convenciones:
                           11 en binario es (00001011)
     - Signo-Magnitud =>                     10001011
     - Signo con Complemento a 1 =>          11110100
     - Signo con Complemento a 2 =>          11110101

La representación "Signo-Magnitud" se usa en aritmética ordinaria pero no es ágil para la artimética del computador al tener que manejar por separado el signo y la magnitud. El "Signo con Ca1" raramente se usa para operaciones aritméticas, es útil para operaciones lógicas.

Vamos a realizar las siguientes operaciones utilizando la representación del "Signo con Ca2".

Suma

Si usásemos "Signo-Magnitud" en caso de ser un número positivo y otro negativo, necesitaríamos comparar las magnitudes para saber después de realizar la resta que signo predominaría.

Usando representación de los números negativos en modo Ca2 no se necesita comparar y las operaciones de suma resultan correctas con el signo incluido.

Para sumar dos números en caso de haber uno negativo, se debe calcular el Ca2  
del número negativo y luego realizar la suma. En caso de que el resultado sea  
negativo, este estará expresado en Ca2.
Ejemplos:

     +3  00000011   
     -3  11111101   ( Ca2 de 3 )
     --------------
      0  00000000   Cualquier acarreo del bit de signo es descartado

     +4  00000100
     -6  11111010   ( Ca2 de 6 )
     ------------
     -2  11111110  en Ca2 --> 00000001 + 1 = 00000010 ( 2 )
     
     -4 11111100   ( Ca2 de 4 )
     -6 11111010   ( Ca2 de 6 )
     -----------
    -10 11110110   ( Ca2 de 10)
    

Es importante para obtener un resultado correcto, asegurarse, que el número de bits sean suficientes ya que si sumamos 2 números de "n bits" y el resultado de la operación es un número de "n+1" bits estaremos produciendo un "overflow" obteniendo un resultado incorrecto.

Resta

A (minuendo) - B (Substraendo) = C ( Resto o diferencia)

  • Los números negativos se trabajarán en Ca2.
  • Calculamos el Ca2 del "Substraendo" y lo sumaremos al "Minuendo", esto se hace porque una operación de resta se puede convertir en una suma si el signo del "Substraendo" se cambia ( con el Ca2 se cambia su signo. Ejemplo: (+A) - (+B) = (+A) + (-B); (+A) - (-B) = (+A) + (+B)...
  • El acarreo del bit de signo se descarta.

Esto nos permite usar el mismo hardware para hacer sumas y restas lo único que hay que hacer es trabajar los números negativos en Ca2, al substrayendo aplicar el Ca2, en todos casos se realizarán sumas y el resultado si es negativo siempre estará expresado en Ca2. Siempre será necesario interpretar de un forma u otra los resultados en función de que estemos trabajando con números con signo o sin signo.

  Ejemplos:  4 - 10 = -6  00000100  ( 4 en binario )
                       +(11110110) (-10 en Ca2)
                        ----------
                         11111010  ( -6 en Ca2)
  
           -3 - (-2) = -1  11111101 ( -3 en Ca2)
                         + 00000010 ( Ca2 de -2 --> 2)
                           --------
                           11111111 ( -1 en Ca2 )

Números en IceStudio

¿Cómo trata IceStudio un número introducido como constante? Se crea un módulo llamado "Const_8bits-ice" que maneja número de 8 bits donde se puede introducir un valor constante y se verá que si no se especifica el tipo de dato introducido y se introduce un número negativo como -8,este lo tratará en Ca2 y así operará con él.

En la siguiente figura mostramos el bloque realizado para introducir un valor constante:

"Módulo Constante de 8 bits"

Aquí vemos un ejemplo de su uso introduciendo el valor decimal -8:

"Módulo Constante de 8 bits"

Los números positivos los tratará como números binarios puros sin convertir. Vemos que IceStudio y el Hardware usado ya es capaz de entender y convertir los números negativos a Ca2 para trabajar con ellos en forma de Ca2. (Este caso los trata como números de tipo entero y este tratará los números negativos en Ca2)

Ahora creamos un módulo donde se realiza la resta de dos valores constantes introducimos y usaremos este en un ejemplo para ver que el resultado de la resta cuando es un número negativo es tratado en Ca2 y los resultados positivos como números binarios tal cual.

Módulo de la Resta:

"Módulo Constante de 8 bits"

"Módulo Constante de 8 bits"