Saltar al contenido principal

# 2.3: Números binarios negativos

$$\newcommand{\vecs}[1]{\overset { \scriptstyle \rightharpoonup} {\mathbf{#1}} }$$

$$\newcommand{\vecd}[1]{\overset{-\!-\!\rightharpoonup}{\vphantom{a}\smash {#1}}}$$

$$\newcommand{\id}{\mathrm{id}}$$ $$\newcommand{\Span}{\mathrm{span}}$$

( \newcommand{\kernel}{\mathrm{null}\,}\) $$\newcommand{\range}{\mathrm{range}\,}$$

$$\newcommand{\RealPart}{\mathrm{Re}}$$ $$\newcommand{\ImaginaryPart}{\mathrm{Im}}$$

$$\newcommand{\Argument}{\mathrm{Arg}}$$ $$\newcommand{\norm}[1]{\| #1 \|}$$

$$\newcommand{\inner}[2]{\langle #1, #2 \rangle}$$

$$\newcommand{\Span}{\mathrm{span}}$$

$$\newcommand{\id}{\mathrm{id}}$$

$$\newcommand{\Span}{\mathrm{span}}$$

$$\newcommand{\kernel}{\mathrm{null}\,}$$

$$\newcommand{\range}{\mathrm{range}\,}$$

$$\newcommand{\RealPart}{\mathrm{Re}}$$

$$\newcommand{\ImaginaryPart}{\mathrm{Im}}$$

$$\newcommand{\Argument}{\mathrm{Arg}}$$

$$\newcommand{\norm}[1]{\| #1 \|}$$

$$\newcommand{\inner}[2]{\langle #1, #2 \rangle}$$

$$\newcommand{\Span}{\mathrm{span}}$$ $$\newcommand{\AA}{\unicode[.8,0]{x212B}}$$

$$\newcommand{\vectorA}[1]{\vec{#1}} % arrow$$

$$\newcommand{\vectorAt}[1]{\vec{\text{#1}}} % arrow$$

$$\newcommand{\vectorB}[1]{\overset { \scriptstyle \rightharpoonup} {\mathbf{#1}} }$$

$$\newcommand{\vectorC}[1]{\textbf{#1}}$$

$$\newcommand{\vectorD}[1]{\overrightarrow{#1}}$$

$$\newcommand{\vectorDt}[1]{\overrightarrow{\text{#1}}}$$

$$\newcommand{\vectE}[1]{\overset{-\!-\!\rightharpoonup}{\vphantom{a}\smash{\mathbf {#1}}}}$$

$$\newcommand{\vecs}[1]{\overset { \scriptstyle \rightharpoonup} {\mathbf{#1}} }$$

$$\newcommand{\vecd}[1]{\overset{-\!-\!\rightharpoonup}{\vphantom{a}\smash {#1}}}$$

$$\newcommand{\avec}{\mathbf a}$$ $$\newcommand{\bvec}{\mathbf b}$$ $$\newcommand{\cvec}{\mathbf c}$$ $$\newcommand{\dvec}{\mathbf d}$$ $$\newcommand{\dtil}{\widetilde{\mathbf d}}$$ $$\newcommand{\evec}{\mathbf e}$$ $$\newcommand{\fvec}{\mathbf f}$$ $$\newcommand{\nvec}{\mathbf n}$$ $$\newcommand{\pvec}{\mathbf p}$$ $$\newcommand{\qvec}{\mathbf q}$$ $$\newcommand{\svec}{\mathbf s}$$ $$\newcommand{\tvec}{\mathbf t}$$ $$\newcommand{\uvec}{\mathbf u}$$ $$\newcommand{\vvec}{\mathbf v}$$ $$\newcommand{\wvec}{\mathbf w}$$ $$\newcommand{\xvec}{\mathbf x}$$ $$\newcommand{\yvec}{\mathbf y}$$ $$\newcommand{\zvec}{\mathbf z}$$ $$\newcommand{\rvec}{\mathbf r}$$ $$\newcommand{\mvec}{\mathbf m}$$ $$\newcommand{\zerovec}{\mathbf 0}$$ $$\newcommand{\onevec}{\mathbf 1}$$ $$\newcommand{\real}{\mathbb R}$$ $$\newcommand{\twovec}[2]{\left[\begin{array}{r}#1 \\ #2 \end{array}\right]}$$ $$\newcommand{\ctwovec}[2]{\left[\begin{array}{c}#1 \\ #2 \end{array}\right]}$$ $$\newcommand{\threevec}[3]{\left[\begin{array}{r}#1 \\ #2 \\ #3 \end{array}\right]}$$ $$\newcommand{\cthreevec}[3]{\left[\begin{array}{c}#1 \\ #2 \\ #3 \end{array}\right]}$$ $$\newcommand{\fourvec}[4]{\left[\begin{array}{r}#1 \\ #2 \\ #3 \\ #4 \end{array}\right]}$$ $$\newcommand{\cfourvec}[4]{\left[\begin{array}{c}#1 \\ #2 \\ #3 \\ #4 \end{array}\right]}$$ $$\newcommand{\fivevec}[5]{\left[\begin{array}{r}#1 \\ #2 \\ #3 \\ #4 \\ #5 \\ \end{array}\right]}$$ $$\newcommand{\cfivevec}[5]{\left[\begin{array}{c}#1 \\ #2 \\ #3 \\ #4 \\ #5 \\ \end{array}\right]}$$ $$\newcommand{\mattwo}[4]{\left[\begin{array}{rr}#1 \amp #2 \\ #3 \amp #4 \\ \end{array}\right]}$$ $$\newcommand{\laspan}[1]{\text{Span}\{#1\}}$$ $$\newcommand{\bcal}{\cal B}$$ $$\newcommand{\ccal}{\cal C}$$ $$\newcommand{\scal}{\cal S}$$ $$\newcommand{\wcal}{\cal W}$$ $$\newcommand{\ecal}{\cal E}$$ $$\newcommand{\coords}[2]{\left\{#1\right\}_{#2}}$$ $$\newcommand{\gray}[1]{\color{gray}{#1}}$$ $$\newcommand{\lgray}[1]{\color{lightgray}{#1}}$$ $$\newcommand{\rank}{\operatorname{rank}}$$ $$\newcommand{\row}{\text{Row}}$$ $$\newcommand{\col}{\text{Col}}$$ $$\renewcommand{\row}{\text{Row}}$$ $$\newcommand{\nul}{\text{Nul}}$$ $$\newcommand{\var}{\text{Var}}$$ $$\newcommand{\corr}{\text{corr}}$$ $$\newcommand{\len}[1]{\left|#1\right|}$$ $$\newcommand{\bbar}{\overline{\bvec}}$$ $$\newcommand{\bhat}{\widehat{\bvec}}$$ $$\newcommand{\bperp}{\bvec^\perp}$$ $$\newcommand{\xhat}{\widehat{\xvec}}$$ $$\newcommand{\vhat}{\widehat{\vvec}}$$ $$\newcommand{\uhat}{\widehat{\uvec}}$$ $$\newcommand{\what}{\widehat{\wvec}}$$ $$\newcommand{\Sighat}{\widehat{\Sigma}}$$ $$\newcommand{\lt}{<}$$ $$\newcommand{\gt}{>}$$ $$\newcommand{\amp}{&}$$ $$\definecolor{fillinmathshade}{gray}{0.9}$$

Con la suma que se logra fácilmente, podemos realizar la operación de resta con la misma técnica simplemente haciendo negativo uno de los números. Por ejemplo, el problema de resta de 7 - 5 es esencialmente el mismo que el problema de suma 7 + (-5). Como ya sabemos representar números positivos en binario, todo lo que necesitamos saber ahora es cómo representar a sus contrapartes negativas y podremos restar.

Por lo general representamos un número decimal negativo colocando un signo menos directamente a la izquierda del dígito más significativo, al igual que en el ejemplo anterior, con -5. Sin embargo, todo el propósito del uso de la notación binaria es construir circuitos de encendido/apagado que puedan representar valores de bits en términos de voltaje (2 valores alternativos: ya sea “alto” o “bajo”). En este contexto, no tenemos el lujo de un tercer símbolo como un signo “menos”, ya que estos circuitos sólo pueden estar encendidos o apagados (dos estados posibles). Una solución es reservar un bit (circuito) que no hace más que representar el signo matemático:

Como puede ver, tenemos que tener cuidado cuando comenzamos a usar bits para cualquier propósito que no sea los valores estándar ponderados por lugar. De lo contrario, 1101 2 podría malinterpretarse como el número trece cuando en realidad nos referimos a representar cinco negativos. Para mantener las cosas bien aquí, primero debemos decidir cuántos bits se van a necesitar para representar los números más grandes con los que trataremos, y luego asegurarnos de no exceder esa longitud de campo de bits en nuestras operaciones aritméticas. Para el ejemplo anterior, me he limitado a la representación de números del siete negativo (1111 2) al siete positivo (0111 2), y no más, haciendo del cuarto bit el bit de “signo”. Sólo estableciendo primero estos límites puedo evitar la confusión de un número negativo con un número mayor, positivo.

Representando cinco negativos como 1101 2 es un ejemplo del sistema signo-magnitud de numeración binaria negativa. Al usar el bit más a la izquierda como indicador de signo y no como valor ponderado por lugar, estoy sacrificando la forma “pura” de notación binaria por algo que me da una ventaja práctica: la representación de números negativos. El bit más a la izquierda se lee como el signo, ya sea positivo o negativo, y los bits restantes se interpretan de acuerdo con la notación binaria estándar: de izquierda a derecha, colocar pesos en múltiplos de dos.

Por simple que sea el enfoque de signo-magnitud, no es muy práctico para fines aritméticos. Por ejemplo, ¿cómo agrego un cinco negativo (1101 2) a cualquier otro número, usando la técnica estándar para la adición binaria? Tendría que inventar una nueva forma de hacer la suma para que funcione, y si lo hago, bien podría hacer el trabajo con la resta larga; no hay ventaja aritmética en usar números negativos para realizar la resta a través de la suma si tenemos que hacerlo con numeración de signo-magnitud, y eso fue nuestro objetivo!

Hay otro método para representar números negativos que funciona con nuestra técnica familiar de suma larga y también tiene más sentido desde el punto de vista de la numeración ponderada por lugar, llamada complementación. Con esta estrategia, asignamos el bit más a la izquierda para que sirva a un propósito especial, tal como lo hicimos con el enfoque de signo-magnitud, definiendo nuestros límites numéricos igual que antes. Sin embargo, esta vez, el bit más a la izquierda es más que un poco de signo; más bien, posee un valor de peso posicional negativo. Por ejemplo, un valor de cinco negativos se representaría como tal:

Con los tres bits correctos siendo capaces de representar una magnitud de cero a siete, y el bit más a la izquierda representando cero u ocho negativo, podemos representar con éxito cualquier número entero de siete negativo (1001 2 = -8 10 + 1 10 = -7 10) a siete positivos (0111 2 = 0 10 + 7 10 = 7 10).

Representar números positivos en este esquema (con el cuarto bit designado como el peso negativo) no es diferente del de la notación binaria ordinaria. Sin embargo, representar números negativos no es tan sencillo:

Tenga en cuenta que los números binarios negativos en la columna derecha, siendo la suma del total de los tres bits de la derecha más los ocho negativos del bit más a la izquierda, no “cuentan” en la misma progresión que los números binarios positivos en la columna izquierda. Más bien, los tres bits correctos tienen que establecerse en el valor adecuado para igualar el total deseado (negativo) cuando se suman con el valor negativo de ocho posiciones del bit más a la izquierda.

Esos tres bits correctos se conocen como el complemento de dos del número positivo correspondiente. Considera la siguiente comparación:

En este caso, siendo el bit de ponderación negativo el cuarto bit (valor posicional de ocho negativo), el complemento de los dos para cualquier número positivo será cualquier valor que se necesite para sumar al ocho negativo para hacer que ese valor positivo sea equivalente negativo. Agradecidamente, hay una manera fácil de averiguar el complemento de dos para cualquier número binario: simplemente invertir todos los bits de ese número, cambiar todos los 1 a 0's y viceversa (para llegar a lo que se llama el complemento) y luego agregar uno! Por ejemplo, para obtener el complemento de dos de cinco (101 2), primero invertiríamos todos los bits para obtener 010 2 (el “complemento de uno”), luego agregaríamos uno para obtener 011 2, o -5 10 en forma de complemento de dos bits de tres bits.

Curiosamente, generar el complemento de dos de un número binario funciona igual si manipulas todos los bits, incluyendo el bit más a la izquierda (signo) al mismo tiempo que los bits de magnitud. Probemos esto con el ejemplo anterior, convirtiendo un cinco positivo a un cinco negativo, pero realizando el proceso de complementación en los cuatro bits. Debemos estar seguros de incluir el bit de signo 0 (positivo) en el número original, cinco (0101 2). Primero, invertir todos los bits para obtener el complemento de uno: 1010 2. Después, sumando una, obtenemos la respuesta final: 1011 2, o -5 10 expresada en cuatro bits, forma de complemento de dos.

Es de vital importancia recordar que el lugar del bit de peso negativo ya debe estar determinado antes de que se puedan hacer conversiones de complemento de dos. Si nuestro campo de numeración binaria fuera tal que el octavo bit fuera designado como el bit de peso negativo (10000000 2), tendríamos que determinar el complemento de los dos en base a los siete de los otros bits. Aquí, el complemento de cinco de dos (0000101 2) sería 1111011 2. Un cinco positivo en este sistema se representaría como 00000101 2, y un cinco negativo como 11111011 2.

This page titled 2.3: Números binarios negativos is shared under a GNU Free Documentation License 1.3 license and was authored, remixed, and/or curated by Tony R. Kuphaldt (All About Circuits) via source content that was edited to the style and standards of the LibreTexts platform; a detailed edit history is available upon request.