¿Por qué el código inverso original y el código complemento de un número positivo son iguales?
Los números pueden ser positivos o negativos, y la computadora usa el bit más alto del número para representar el signo (0 representa un número positivo, 1 representa un número negativo). Este es el código original para los números de máquina. Suponiendo que la cantidad de bits que la máquina puede procesar es 8, es decir, cuando la longitud de la palabra es 1 byte, el rango de valores que puede representar el código original es
(-127 ~ -0 0 ~ 127)***256.
Con la representación numérica, puede realizar operaciones aritméticas con números. Pero pronto descubrimos que cuando usamos el código original con el bit de signo, las operaciones de multiplicación y división eran correctas, pero las operaciones de suma y resta eran problemáticas, de la siguiente manera: Supongamos que la longitud de la palabra es de 8 bits
( 1 ) 10 - ( 1 )10 = ( 1 )10 ( -1 )10 = ( 0 )10
(00000001)original (10000001)original = ( 10000010)original = ( -2 ) Obviamente es incorrecto.
Dado que no hay problema en sumar dos números enteros, se descubre que el problema radica en el número negativo con el bit de signo, y el código inverso de cada bit excepto el bit de signo producirá el código inverso. El código inverso y el código original tienen el mismo espacio de valores y se corresponden entre sí. La siguiente es la operación de resta del código inverso:
(1)10 - (1) 10= (1) 10 (-1) 10= (0)10
( 00000001) Inversa (11111110)inversa = (11111111)inversa = ( -0 ) Hay un problema.
( 1 )10 - ( 2 )10 = ( 1 )10 ( -2 )10 = ( -1 )10
(00000001) inversa (11111110) inversa = (11111110 )inverso = (-1) es correcto
El problema ocurre en (0) y (-0). En el concepto de cálculo de las personas, no hay diferencia positiva o negativa entre 0. (Los indios fueron los primeros en utilizar el cero como marca y escribirlo en la aritmética. Las matemáticas indias y el conteo decimal incluían el cero e hicieron grandes contribuciones a la civilización humana).
Se introduce el concepto de complemento. El complemento de un número negativo consiste en sumar 1 al recíproco del número negativo, mientras que el número positivo permanece sin cambios y el recíproco de un número positivo es igual al complemento del número original. En el código de complemento, se usa (-128) en lugar de (-0), por lo que el rango de representación del código de complemento es:
(-128~0~127)***256.
Nota: (-128) no tiene número original correspondiente ni recíproco, (-128) = (10000000) La suma y resta de complementos es la siguiente:
( 1 ) 10 - ( 1 ) 10= ( 1 )10 ( -1 )10 = ( 0 )10
(00000001)-complemento (11111111)-complemento= (00000000)-complemento= (0)10 p>
(00000001)-complemento (11111111)-complemento = (0)10
(00000001)-complemento (11111111)-complemento = (00000000)complemento = (0) Correcto
( 1 ) 10- ( 2 ) 10= ( 1 )10 ( -2 )10 = ( -1 )10
(00000001)complemento (11111110)complemento = (11111111)complemento = ( - 1) Correcto
Por lo tanto, el propósito de diseño del código complementario es:
(1) Permitir que el bit de signo participe en la operación junto con la parte de valor significativo, simplificando así las reglas de operación.
(2) Convertir operaciones de resta en operaciones de suma, simplificando aún más el diseño del cableado de los operadores en la computadora
Todas estas conversiones se completan en el nivel más bajo de la computadora y en nuestro En otros lenguajes de alto nivel como ensamblador y C, se utiliza código sin formato.
Extraído de /club/showtxt.asp?id=99878.