¿Qué es el código complemento?
La razón principal es: después de usar el 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 sumen dos números representados por códigos complementarios, si hay redondeo en el bit más alto (bit de signo), se descartará el redondeo.
2. El proceso de conversión entre el 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 el recíproco del valor absoluto del código original, luego suma 1 al número entero;
Por ejemplo, el complemento de -7: por ser un número negativo, el bit de signo es 1 y el entero es 10000111; los 7 bits restantes son el recíproco del código original. 10000111; los 7 bits restantes son el valor absoluto de -7. El código original para 7 es 0000111. Invertir un bit es 1111000 y luego sumar 1, por lo que el complemento de -7 es 11111001.
Dado el complemento de un número, la operación de encontrar el código original se divide en dos situaciones:
(1) Si el bit de signo del complemento es "0", significa que es un número positivo, entonces el complemento es el código original de este número.
(2) Si el bit de signo del complemento 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 los bits restantes. se toman
Negar, luego sumar 1 al número entero.
Por ejemplo, si se sabe que el complemento a uno es 11111001, entonces el código original es 10000111 (-7): como el bit de signo es "1", esto significa que es un número negativo p>
, por lo que el bit permanece sin cambios y sigue siendo "1"; invierta los 7 bits restantes de 1111001 a 0000110, luego agregue 1 al número completo, por lo que es 10000111;
En el artículo "Hablando sobre código original, código inverso y código complementario", no se menciona un concepto muy importante "modo". Introduciré el concepto de "modo" aquí
:
"Modo" se refiere al rango de conteo del sistema de medición. Como reloj, etc. Una computadora también puede considerarse una máquina de medición, que también tiene un rango de medición, es decir, un "modo". Por ejemplo
El rango de medición del reloj es de 0 a 11, modo = 12.
El rango de medición para una computadora con n bits es de 0 a 2(n)-1, modo = 2(n). Nota: n representa el índice
El "modo" es esencialmente la cantidad de "desbordamiento" generada por el medidor. Su valor no está representado en el medidor. El medidor solo puede representar el resto del patrón. >
. Cualquier medidor con modo se puede convertir de sustractivo a aditivo.
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. retroceder 4 horas, es decir: 10-4=6
La otra es bajar 8 horas: 10 8=12 6=6
En el sistema de módulo de 12 , suma 8 y resta 4 El efecto es el mismo, por lo que cualquier operación de restar 4 se puede reemplazar sumando 8.
En términos de "módulo", 8 y 4 son complementarios. De hecho, en un sistema de 12 modulaciones, 11 y 1, 10 y 2, 9 y 3, 7 y 5, y 6 y 6 tienen esta propiedad.
***La misma característica es que la suma de los dos es igual al módulo.
Para las computadoras, los conceptos y métodos son exactamente los mismos.
En una computadora de n bits, suponiendo que n = 8, el número más grande que se puede representar es 111111111111. Si agrega 1 más, se llama 100000000 (9 dígitos), pero debido a que solo hay 8 dígitos, el 1 más alto se pierde naturalmente. . Se remonta a 00000000, por lo que un sistema binario de 8 bits es módulo 2(8). En este sistema, el problema de resta también se puede reducir a un problema de suma simplemente representando el minuendo en su complemento.
El código de complemento a dos que se utiliza cuando las computadoras procesan números es el código de complemento a dos.
Otros dos conceptos
El complemento a uno se refiere a números positivos = código original, números negativos = código inverso
Y el complemento a dos se refiere a lo habitual Los llamados complementar.
Las siguientes son las operaciones algebraicas de suma y resta de códigos de complemento:
1. Suma de código de complemento
[X Y]complemento = [X]complemento [Y ]complemento
Ejemplo 7X= 0110011, Y=-0101001,
[X]complemento=00110011 [Y]complemento=11010111
[X]complemento= 00110011 [Y ]complemento=11010111
[X]complemento=00110011 [Y]complemento=11010111
[X]complemento=00110011 [Y]complemento=11010111
[ X]complemento =00110011 [Y]complemento=11010111
[X]complemento =00110011 [Y]complemento=11010111
[X Y]-complemento = [X]- complemento = [X]-complemento [Y]-complemento = 00110011 11010111=00001010
Nota: Dado que la longitud de bits de los operadores en las computadoras es fija, se redondeará el bit más alto generado en la operación anterior. , por lo que el resultado no es
100001010 sino 00001010.
El resultado no es 00001010. p>2. Resta de complemento
[X-Y]-complemento = [X]-complemento - [Y]-complemento = [X]-complemento [-Y]-complemento
Entre ellos, el complemento [-Y] se llama complemento negativo. El método para encontrar el complemento negativo es: sumar "1" al último dígito de cada bit del complemento (incluido el bit de signo).
La siguiente es una explicación algebraica del complemento:
Cualquier número se puede expresar como -a=2^(n-1)-2^(n-1)-a ;
Esto supone que a es positivo, por lo que -a es negativo.
Según el método de convertir números binarios a números decimales, podemos expresar a como: a=k0*2^0 k1*2^1 k2*2^2...k(n-2)*2^( n- 2)
Aquí, k0, k1, k2, k(n-2) son 1 o 0. Aquí, configuramos los dígitos binarios de un número en n bits, es decir, su El módulo es 2^(n-1), y la expansión binomial de 2^(n-1) es: 1 2^0 2^1 2^2... 2^(n-2). 2^(n-1)-2^(n-1)-a, donde 2^(n-1)-a se reemplaza por a=k0*2^0 k1* 2^1 k2*2 ^2 .. .... k(n-2)*2^(n-2) y 2^(n-1)=1 2^0 2^1 2^2 ...... 2^( n-2) En las dos ecuaciones, 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^0 1, y la transformación en este paso es exactamente la inversión El principio del algebraico regla para sumar 1. Porque aquí, k0, k1, k2, k3... son 0 o 1, y la operación de 1-k0, 1-k1, 1-k2 es la operación binaria inversa, y la razón por la que se suma 1 es Esta es porque la expansión binomial de 2^(n-1) tiene 1 término al final. Y en -a = 2 ^ (n-1) -2 ^ (n-1) -a, hay un término desconocido -2 ^ (n-1), que es el primer 1 en el complemento Cuando se convierte. a decimal, el primer 1 debe multiplicarse por 2^(n-1), que es exactamente el patrón del binario de n bits.
No se pueden publicar fórmulas, por lo que parece engorroso; si lo escribes como una ecuación algebraica, parece muy conveniente.
Nota: En 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 módulo es 2^(n-1). El binario de 8 bits mencionado anteriormente es módulo 2^8, porque el bit más alto es un bit sin signo y representa un rango de valores de 0 - 2^8-1.