manager - ¿El complemento es un problema del mundo real o simplemente histórico?
instalar google tag manager (9)
¿El complemento es un problema del mundo real o simplemente histórico?
Sí, todavía se usa. Incluso se usa en los modernos procesadores Intel. De Intel® 64 y IA-32 Architectures Software Developer''s Manual 2A, página 3-8:
3.1.1.8 Sección de descripción
Cada instrucción se describe luego por número de secciones de información. La sección "Descripción" describe el propósito de las instrucciones y operandos necesarios en más detalle.
Resumen de términos que pueden usarse en la sección de descripción:
* SSE heredado: se refiere a SSE, SSE2, SSE3, SSSE3, SSE4, AESNI, PCLMULQDQ y a cualquier conjunto de instrucciones futuras que haga referencia a los registros XMM y codificados sin un prefijo VEX.
* VEX.vvvv. El campo de bits VEX que especifica un registro de origen o de destino (en forma de complemento de 1).
* rm_field: abreviatura para el campo ModR / M r / m y cualquier REX.B
* reg_field: abreviatura para el campo reg ModR / M y cualquier REX.R
Otra pregunta sobre la determinación de impar / uniformidad en C, y el enfoque idiomático (x & 1) se marcó correctamente como roto para los sistemas basados en el complemento , que el estándar C permite.
¿Los sistemas realmente existen en el "mundo real" fuera de los museos informáticos? He estado programando desde la década de 1970 y estoy bastante seguro de que nunca me he encontrado con una bestia así.
¿Alguien está desarrollando o probando código para tal sistema? Y, si no, ¿deberíamos preocuparnos por esas cosas o deberíamos ponerlas en la sala 101 junto con cintas de papel y tarjetas perforadas ...?
Decidí encontrar uno. Los sistemas Unisys ClearPath tienen un compilador ANSI C (sí lo llaman "American National Standard C", para el que incluso la documentación en PDF se actualizó por última vez en 2013. La documentación está disponible en línea ;
Allí, los tipos firmados utilizan la representación complementaria de uno, con las siguientes propiedades:
Type | Bits | Range
---------------------+------+-----------------
signed char | 9 | -2⁸+1 ... 2⁸-1
signed short | 18 | -2¹⁷+1 ... 2¹⁷-1
signed int | 36 | -2³⁵+1 ... 2³⁵-1
signed long int | 36 | -2³⁵+1 ... 2³⁵-1
signed long long int | 72 | -2⁷¹+1 ... 2⁷¹-1
Sorprendentemente, también admite, de manera predeterminada, no unsigned int
y unsigned long
, que van desde 0 ... 2³⁶ - 2
, pero pueden cambiarse a 0 ... 2³⁶ - 1
con pragma.
El CDC Cyber 18 que utilicé en el ''80 era una máquina complementaria 1s, pero eso fue hace casi 30 años, y no he visto uno desde entonces (sin embargo, esa también fue la última vez que trabajé en un PC que no es de PC)
Lo curioso es que la gente hizo esa misma pregunta en comp.std.c en 1993 , y nadie podía apuntar a la máquina complementaria que se había usado en ese momento .
Entonces sí, creo que podemos decir con confianza que el complemento de uno pertenece a un rincón oscuro de nuestra historia, prácticamente muerto, y ya no es una preocupación.
Nos bajamos de nuestros Honeyboxen de la última década del año pasado, lo que la convirtió en nuestra máquina más antigua en el lugar. Fue complemento de dos. Esto no quiere decir que saber o ser consciente del complemento de uno sea algo malo. Simplemente, probablemente nunca te topes con los problemas de complemento de uno hoy, sin importar cuánta arqueología informática tengan en el trabajo.
Los problemas con los que es más probable que se encuentre en el lado entero son los problemas endian (estoy viendo su PDP ). Además, se encontrará con más problemas del "mundo real" (es decir, hoy en día) con los formatos de punto flotante que con los formatos enteros.
Nunca me he encontrado con un sistema complementario, y he estado codificando todo el tiempo que tienes.
Pero encontré un sistema de complemento de 9: el lenguaje de máquina de una calculadora HP-41c. Admitiré que esto puede considerarse obsoleto, y no creo que alguna vez hayan tenido un compilador de C para ellos.
RFC 791 p.14 define la suma de comprobación del encabezado IP como:
El campo de suma de comprobación es el complemento de 16 bits de la suma del complemento de una de las palabras de 16 bits en el encabezado. Para calcular la suma de comprobación, el valor del campo de suma de comprobación es cero.
Así que el complemento de uno todavía se usa mucho en el mundo real, en cada paquete IP que se envía. :)
Todo se reduce a conocer tus raíces.
Sí, técnicamente es una técnica antigua y probablemente haría lo que otras personas sugirieron en esa pregunta y usaré el operador módulo (%) para determinar impar o par. Pero comprender qué complemento a 1 (o complemento a 2) siempre es bueno saber. Ya sea que los uses o no, tu CPU está lidiando con esas cosas todo el tiempo. Entonces nunca puede doler entender el concepto. Ahora, los sistemas modernos lo hacen para que nunca tenga que preocuparse por cosas así, por lo que se ha convertido en un tema para la programación de 101 cursos de alguna manera. Pero debes recordar que algunas personas todavía usarían esto en el "mundo real" ... por ejemplo, contrariamente a la creencia popular, ¡hay personas que todavía usan el ensamblaje! No muchos, pero hasta que las CPU puedan entender C # sin procesar y Java, alguien todavía tendrá que entender esto.
Y diablos, nunca se sabe cuándo podría encontrarse a uno mismo haciendo algo donde realmente necesita realizar operaciones binarias y ese complemento podría ser útil.
Trabajo en el campo de la telemetría y algunos de nuestros clientes tienen convertidores análogos a digitales que todavía usan el complemento de 1. Tuve que escribir el código el otro día para convertir el complemento 1 al complemento 2 para compensar.
Así que sí, todavía está por ahí (pero no te vas a encontrar con eso muy a menudo).