¿Por qué la salida de datos de algunos circuitos integrados está en forma de complemento a dos?

He estado buscando en algunos circuitos integrados ahora. Algunos de ellos tienen el resultado calculado (datos) en forma de complemento a dos, colocados en el registro para ser leídos por otro IC. ¿Cuál es la lógica detrás de convertir los datos en complemento a dos antes de leerlos?

Los ejemplos son como

  1. Convertidor analógico a digital (Página 30 Formato de datos de salida). ENLACE
  2. Acelerómetro Digital (Página 1 Descripción General). ENLACE

He visto un comportamiento similar en el cálculo de CRC para IEEE 802.3. Por ejemplo, si calculamos el polinomio CRC de 32 bits (usando x32+x26+x23+x22+x16+x12+x11+x10+x8+x7+x5+x4+x2+x+1) el CRC calculado se invierte en bits y complementado antes de la transmisión.

Bueno, la pregunta es ¿por qué está formateado en forma de complemento? ¿No se puede leer sin complementar los datos?

Un ejemplo de una parte que hace el CRC de la manera que usted dice sería útil para responder esa parte de su pregunta.
Su ejemplo de CRC no tiene nada que ver con los números firmados que usan algunos ADC.

Respuestas (3)

Para un ADC cuyo formato natural es binario compensado, el complemento a 2 es la forma natural de representar números con signo. Todo lo que tiene que hacer es invertir el MSB.

De acuerdo en que el complemento a dos es un formato natural para datos de dispositivos que miden valores positivos y negativos... pero el complemento a dos implica más que una simple inversión de MSB.
@BPete: No, realmente es así de simple. Estás pensando en otra cosa: cómo convertir un número positivo en el número negativo correspondiente.
@DaveTweed: tiene razón, estaba pensando en la conversión de negativo a positivo para interpretar los datos ... la conversión de binario compensado a dos-comp (dentro del ADC) es de hecho una inversión de MSB.
Otra forma de verlo es: para desplazar un rango de enteros con signo de 8 bits al rango sin signo, solo tiene que agregar la mitad del rango, es decir, 0x80. Esto es equivalente a invertir el bit superior.

La mayoría de los microcontroladores y microprocesadores representan números negativos en forma de complemento a 2. Y muchos ADC están diseñados para su uso en sistemas en tiempo real con limitaciones de tiempo. Tener un formato de complemento a 2 en un ADC (u otro sensor) significa que los números negativos se representan de una manera que su procesador puede usar directamente, sin tener que pasar ciclos haciendo la conversión desde algún otro formato.

En un CRC, sospecho que el resultado simplemente se complementa (invertido bit a bit, también conocido como "complemento de 1"). Un CRC es un cálculo puramente entero y no involucra números negativos, por lo que no tiene absolutamente ningún sentido hacer un complemento a 2 con ese número. No puedo decir por qué lo complementarías con 1, pero debería hacer poca diferencia para el usuario.

La pregunta se reduce a cómo representar números negativos, ya que los números positivos son iguales en la mayoría de las representaciones binarias. Para la mayoría de los casos, el complemento a 2 es la forma más conveniente de representar números negativos en binario. Es casi seguro que así es como el procesador que tiene que manipular la lectura A/D hace sus cálculos, por lo que presentarlo en complemento de 2s directamente en el A/D hace que sea fácil para el procesador.

Algunos A/D solo miden voltajes positivos. Esos pueden usar binario sin firmar. Si no le gusta el complemento a 2 para valores negativos, ¿qué preferiría? Parece que la mayoría de las alternativas causarían más complicaciones.