¿Cuáles son las ventajas del Complemento de Dos?

11

En algunos dispositivos ADC / DAC, hay opciones para generar / ingresar los datos en el formulario de complemento de 2.

¿Cuáles son las ventajas de representar datos digitales en el formulario de complemento de Two Cuando simplemente puede tener un código binario directo y ahorrar tiempo de conversión?

    
pregunta rahulb

7 respuestas

11

La representación complementaria de dos de enteros con signo es fácil de manipular en hardware. Por ejemplo, la negación (es decir, x = -x ) se puede realizar simplemente cambiando todos los bits en el número y agregando uno. Realizar la misma operación en binario sin formato (por ejemplo, con un bit de signo) generalmente implica mucho más trabajo, ya que debe tratar ciertos bits en la secuencia como especiales. Lo mismo ocurre con la adición: la operación de agregar números negativos es idéntica a la operación de agregar números positivos, por lo que no se requiere una lógica adicional (sin intención de juego de palabras) para manejar el caso negativo.

Si bien esto no significa que sea más fácil desde su perspectiva, como consumidor de estos datos, disminuye el esfuerzo de diseño y la complejidad del dispositivo, por lo que, presumiblemente, lo hace más barato.

    
respondido por el Polynomial
5

El ADC puede convertir datos (por ejemplo, voltajes de entrada entre 0 y 5V) y usted necesita que los datos no estén firmados (0V = 0, 5V = código máximo) o firmados (2.5V = 0, 0V = max -ve, 5V = max + ve).

Además de que el complemento de 2 es la representación de computadora más común para los datos firmados, la conversión entre los dos formatos descritos anteriormente es completamente trivial: ¡simplemente invierta el MSB!

Esto es increíblemente barato de agregar a la lógica interna del ADC y le da otro punto de venta en la hoja de datos ...

    
respondido por el Brian Drummond
3

Si necesita realizar cálculos matemáticos en las representaciones de números negativos, dos complementos lo hacen más fácil que el binario de compensación, que coincidirá con el tipo de datos "int firmado". Su compilador simplemente sabrá cómo tratar con él. De lo contrario, gasta las tics del reloj convirtiéndose de un lado a otro.

    
respondido por el Scott Seidman
1

En la pregunta, parece implícito que el ADC tarda más tiempo en devolver el valor en forma de complemento a 2 que en binario directo. Si bien este podría ser el caso en alguna implementación particular de un ADC, no es cierto en general (por ejemplo, la serie MSP430 de microcontroladores tiene un periférico en el chip de ADC que informará el valor en binario directo o complemento de 2, pero Toma el mismo número de ciclos en ambos casos).

Con eso fuera del camino, la elección entre el complemento a 2 y el binario directo se reduce principalmente a cómo funcionan sus transductores y cómo le gusta procesar sus datos.

En el modo binario directo, el ADC le da un número que representa la relación entre la magnitud de la cantidad analógica medida (virtualmente siempre voltaje) y la cantidad de referencia a escala completa. Por ejemplo, un ADC de 10 bits puede devolver valores de 0 a 1023 (inclusive). Si mide una tensión (por ejemplo, 1,25 voltios) que es la mitad de la tensión de referencia del ADC (por ejemplo, 2,50 voltios), el código binario que lea será la mitad del valor máximo que podría leer: 512, o aproximadamente, sujeto a redondeo y no linealidades en el ADC.

Por ejemplo, supongamos que tiene un transductor que informa la cantidad de combustible de cohete en un tanque. 0V significa que el tanque está vacío y 2.5V voltios significa que está lleno. Así que solo conectas el transductor a tu ADC, ¡y listo!

Pero observe que en el párrafo anterior, no hay manera de medir voltajes negativos. ¿Qué pasaría si quisiéramos medir el flujo de combustible de cohetes dentro y fuera del tanque (y tuviéramos un transductor para hacerlo)? El ADC no puede medir números negativos, así que tenemos un problema. Sin embargo, hay una manera fácil de falsificarlo utilizando el modo de complemento de 2: en este caso, la salida del transductor se vuelve a polarizar, de modo que el punto cero está a medio camino entre los dos voltajes de referencia del ADC. En otras palabras, los flujos positivos están representados por voltajes entre 1.25 V y 2.50 V, y los flujos negativos están representados por 1.25 V a 0 V, por lo que los flujos en el tanque darán los códigos ADC de 512 a 1023 y los flujos que salgan de las gracias darán Códigos de 511 a 0 (en formato binario directo).

Eso es muy inconveniente. Tenemos que restar 512 de cada medida antes de hacer algo con ella, lo que da números en el rango de -512 a +511. El punto del modo de complemento de 2 es que lo hace por ti!

Sin embargo, es posible que desee utilizar un binario directo con un transductor que produzca resultados firmados. Por ejemplo, su transductor podría tener salidas diferenciales: en este caso, desearía restar la salida invertida de la salida no invertida de todos modos, por lo que no hay ninguna ventaja de usar el complemento de 2.

    
respondido por el nick g
1

El sistema de complemento de los dos está en uso, debido a que el hardware simple funciona de forma natural. Piense, por ejemplo, en el odómetro de su automóvil, que ha restablecido a cero. Luego ponga la marcha atrás y conduzca hacia atrás durante 1 milla (por favor, no haga esto en realidad). Su odómetro (si es mecánico) rodará de 0000 a 9999. El sistema de complemento de los dos se comporta de manera similar.

Tenga en cuenta que realmente no estoy ofreciendo ninguna información nueva aquí, solo el ejemplo del odómetro que alguien podría encontrar útil; me ayudó a comprender la lógica del sistema de complemento de dos cuando era joven. Después de eso, fue fácil para mí aceptar intuitivamente que los sumadores, restadores, etc. funcionan bien con el sistema de complemento de los dos.

Y sí, el odómetro de mi Nissan funciona de esta manera.

    
respondido por el PkP
0

Otros ya han respondido por qué dos complementos binarios son convenientes para el hardware de la computadora. Sin embargo, parece que te estás preguntando por qué un A / D generaría dos complementos en lugar de "binario directo" (lo que creas que realmente signifique).

La mayoría de los A / D generan un valor binario simple sin signo que va de 0 a 2 N -1, donde N es el número de bits a los que convierte A / D. Tenga en cuenta que esto también podría considerarse una notación complementaria de dos, solo que los valores nunca pasan a ser negativos. Si solo estás tratando con números positivos, entonces la mayoría de las representaciones binarias son iguales. Esto incluye dos elogio y la magnitud del signo.

Algunos A / D, particularmente aquellos integrados en microcontroladores, tienen la opción de producir valores negativos para la mitad inferior de su rango. Esto puede ser una ventaja percibida cuando se mide una señal bipolar.

Al menos en un microcontrolador, esto es generalmente tonto. En algunos casos, puede usar los valores A / D directamente sin ninguna conversión. En ese caso, ya ha convertido todos los demás valores al rango A / D. Restringir eso a todos los números no negativos en realidad simplifica las cosas.

De lo contrario, aplicará alguna escala y compensación a las lecturas A / D para obtenerlas en cualquier unidad que use para los valores internamente. Aquí, nuevamente, no hay inconveniente en que los valores sin firmar salgan directamente de la A / D. De hecho, por lo general aplico algunos filtros de paso bajo en los valores sin procesar antes de cualquier escalado y desplazamiento. Saber que esos valores nunca serán negativos simplifica ligeramente los cálculos. Hacer la escala en valores sin signo también hace que las cosas sean un poco más simples a veces.

No puedo recordar un solo caso en más de 100 proyectos de microcontroladores en los que utilicé el A / D en cualquier cosa que no fuera un formato de salida sin firmar.

Entonces, para responder a la pregunta de cuáles son las ventajas de un A / D con dos "cumplidos", hay dos respuestas:

  1. Todos lo hacen de todos modos, solo que la mayoría de las veces estos valores no son negativos, por lo que no se puede diferenciar entre dos cumplidos y otras notaciones, como la magnitud de los signos.

  2. Las ventajas son muy leves. Dentro de un microcontrolador son esencialmente inexistentes.

    En hardware dedicado, puede haber alguna ventaja en tener valores negativos que indiquen un voltaje de entrada negativo, en cuyo caso dos complementos es la forma más fácil de lidiar con el rango de valores. Tenga en cuenta que si el rango de voltaje de entrada no es simétrico con respecto a 0, esta ventaja desaparecerá.

respondido por el Olin Lathrop
-1

¿Qué es este 'código binario directo' del que hablas? Supongo que te refieres a tener un bit de signo que es '1' para negativo y '0' para positivo (o viceversa ). Esto tiene dos desventajas más sobre dos complementos que aún no se han mencionado: uno en gran medida irrelevante en estos días y uno importante.

La gran parte irrelevante es que puede representar un número menos, es decir, 255 números en 8 bits. Esto es bastante irrelevante cuando tienes 32 o 64 bits, pero es importante cuando tienes tan solo 4 o 6 bits para trabajar.

El más importante es que ahora hay dos formas de representar el mismo número, específicamente, 0 - +0 y -0, pero +0 y -0 son el mismo número, por lo que su implementación debe asegurarse de que está No compares estos números cada vez que hagas una verificación de igualdad.

    
respondido por el Jack Aidley

Lea otras preguntas en las etiquetas

Comentarios Recientes

¿Cuáles son las posibles desventajas? ¿Por qué es el mejor complemento individual? Todas y cada una de las clases de Análisis contienen una situación, tanto dentro como fuera del contexto del actor / modelo, y discuten cómo esas situaciones interactúan con los objetos, los estilos y la naturaleza de los scripts. La última sección proporciona más antecedentes sobre cada una de las reglas y desafíos de separación tradicionales (algo que definitivamente debería leer si es un DBA serio o un programador simple)... Lees verder