La Red de Conocimientos Pedagógicos - Conocimientos históricos - ¿Qué es el código complemento?

¿Qué es el código complemento?

1. En los sistemas informáticos, los valores siempre se representan (almacenan) en complemento a dos.

La razón principal: al usar código de complemento, el bit de signo y otros bits se pueden procesar de manera uniforme al mismo tiempo, y la resta también se puede procesar como suma; Además, cuando se suman dos números representados por códigos en complemento a dos, si hay un acarreo en el bit más alto (bit de signo), el acarreo se descartará.

2. El proceso de conversión del código complementario y el código original es casi el mismo.

La representación en complemento a dos de valores numéricos también se divide en dos situaciones:

(1) El complemento a dos de números positivos: igual que el código original.

Por ejemplo, el complemento de +9 es 00001001.

(2) El complemento de un número negativo: el bit de signo es 1, y los bits restantes son la inversión bit a bit del código original del valor absoluto del número, luego se suma el número completo; 1.

Por ejemplo, el complemento de -7: debido a que es un número negativo, el bit de signo es "1" y el número entero es 10000111, los 7 bits restantes son el valor absoluto de -7 +; el código original de 7

0000111 se invierte bit a 1111000; agregue 1, por lo que el complemento de -7 es 11111001.

Dado el complemento de un número, existen dos operaciones para encontrar el código original:

(1) Si el bit de signo del complemento es "0", significa que es un número positivo, por lo que el complemento es el código original del número.

(2) Si el bit de signo del código complementario es "1", significa que es un número negativo. La operación para encontrar el código original puede ser: el bit de signo es 1 y el resto. los bits se niegan

y luego se suma 1 al número completo.

Por ejemplo, se sabe que un código complementario es 11111001, entonces el código original es 10000111 (-7): debido a que el bit de signo es "1", significa que es un número negativo, entonces esto El bit permanece sin cambios y sigue siendo "1"; los 7 bits restantes 1111001 se invierten a 0000110 más se suma 1, por lo que es 10000111.

En el documento "Hablando de código original, código inverso y código complementario", no se menciona un concepto muy importante "módulo". Permítanme presentarles brevemente el concepto de "módulo":

"Módulo" se refiere al rango de conteo de un sistema de medición. Como reloj, etc. La computadora también puede considerarse como una máquina de medición. También tiene un rango de medición, es decir, hay un "módulo". Por ejemplo:

El rango de medición del reloj es 0~11, módulo=12.

Significa que el rango de medición de la computadora de n bits es 0~2(n)-1, módulo = 2(n). Nota: n representa el índice

El "módulo" es esencialmente la cantidad de "desbordamiento" producido por el medidor. Su valor no se puede expresar en el medidor. El medidor solo puede expresar la cantidad de moldeado. p >

Resto. Cualquier metro con módulo puede convertir la resta en suma.

Por ejemplo: supongamos que la manecilla de hora actual apunta a las 10 en punto y la hora exacta son las 6 en punto. Hay dos formas de ajustar la hora:

Una. es retrasar la hora 4 horas, es decir: 10-4=6

La otra es marcar 8 horas secuencialmente: 18=12+6=6

En un sistema de 12 módulos, suma 8 y resta 4. El efecto es el mismo, por lo que cualquier operación de restar 4 se puede reemplazar sumando 8.

Para "módulo", 8 y 4 son complementarios entre sí. De hecho, en el sistema de 12 módulos, 11 y 1, 10 y 2, 9 y 3, 7 y 5, 6 y 6 tienen todos esta característica.

La característica más singular es que la suma de los dos es igual al módulo.

Para las computadoras, los conceptos y métodos son exactamente los mismos. Para una computadora de n bits, suponiendo n=8, el número máximo que se puede expresar es 11111111. Si agrega 1 más, se llama 100000000 (9 bits). Sin embargo, como solo hay 8 bits, el bit más alto es 1. se pierde naturalmente. Se devuelve nuevamente 00000000, por lo que el módulo del sistema binario de 8 bits es 2 (8). En dicho sistema, el problema de resta también se puede convertir en un problema de suma, simplemente use el complemento correspondiente para representar la resta.

La aplicación del número de complemento al procesamiento logarítmico por computadora es el código de complemento.

Otros dos conceptos

Complemento a uno se refiere a número positivo = código original, número negativo = código complemento

Y complemento a dos (complemento a dos) se refiere a lo que es Generalmente se le llama complemento.

Aquí están las operaciones algebraicas complementarias de suma y resta:

1. Suma de complemento

[X+Y] complemento = [X] complemento + [Y ] Complemento

Ejemplo 7X=+0110011,Y=-0101001, busque [X+Y]complemento

[X]complemento=00110011 [Y]complemento=11010111

[X+Y] complemento = [X] complemento + [Y] complemento = 00110011+11010111=00001010

Nota: Debido a que la longitud de bits de la unidad aritmética en la computadora es fija, la operación anterior producirá El acarreo del bit más alto se descartará, por lo que el resultado no es

100001010, sino 00001010.

2. Resta de complemento

Complemento [X-Y] = complemento [X] - complemento [Y] = complemento [X] + complemento [-Y]

El complemento [-Y] se llama complemento negativo. El método para encontrar el complemento negativo es: negar cada bit del complemento (incluido el bit de signo) y agregar "1" al último bit.

Aquí está la explicación algebraica del complemento:

Cualquier número se puede expresar como -a=2^(n-1)-2^(n-1)-a; /p>

Esto supone que a es un número positivo, entonces -a es un número negativo. Según el método de conversión de números binarios a decimales, podemos expresar a como: a=k0*2^k1*2^1+k2*2^2+……+k(n-2)*2^( n -2)

Aquí k0, k1, k2, k(n-2) son 1 o 0, y aquí el número de dígitos binarios de a es n, es decir, su módulo es 2^( n-1), y la expansión binomial de 2^(n-1) es: 1+2^2^1+2^2+...+2^(n-2), y la fórmula: - a=2^ En (n-1)-2^(n-1)-a, 2^(n-1)-a se sustituye en a=k0*2^k1*2^1+k2*2 ^2+……+ k(n-2)*2^(n-2) y 2^(n-1)=1+2^2^1+2^2+……+2^(n -2) dos fórmulas, 2^(n-1)-a=(1-k(n-2))*2^(n-2)+(1-k(n-3))*2^(n -3)+…… +(1-k2)*2^2+(1-k1)*2^1+(1-k0)*2^1, y esta transformación es el principio algebraico de la regla de negando y sumando 1 . Porque aquí k0, k1, k2, k3... son 0 o 1, entonces la operación de 1-k0, 1-k1, 1-k2 es la inversión del sistema binario, y ¿por qué deberíamos sumar 1? es 2^(n La expansión binomial de -1) tiene un término 1 al final. En -a = 2 ^ (n-1) -2 ^ (n-1) -a, todavía hay -2 ^ (n-1) inexplicable, que es el primer 1 en el código complementario, el primer 1 Al convertir a decimal, multiplica por 2^(n-1), que es exactamente el módulo del binario de n bits.

No se pueden pegar fórmulas, por lo que parece muy problemático. Parece muy conveniente si lo escribes como una fórmula algebraica.

Nota: binario de n bits, el bit más alto es el bit de signo, por lo que el rango numérico representado es -2^(n-1) ——2^(n-1) -1, por lo que el el módulo es 2^(n-1). El módulo binario de 8 bits mencionado anteriormente es 2^8 porque el bit más alto es un bit sin signo y el rango numérico representado es 0-2^8-1.