¿Qué son los números de máquina y los valores verdaderos?
1. Número de máquina
La representación binaria de un número en una computadora se llama número de máquina de este número. El número de máquina tiene signo. El bit más alto de un número se utiliza para almacenar el signo en la computadora. El número positivo es 0 y el número negativo es 1,12. Por ejemplo, el número +3 en el sistema decimal. , la longitud de la palabra de la computadora es de 8 bits y convertida a binario es 0000 0011. Si es -3, es 1111 1101. Por lo tanto, 00000011 y 1111 1101 aquí son códigos de máquina. El código de máquina contiene una parte simbólica y una parte numérica.
2. Valor real
Dado que el primer bit es el bit de signo, el valor formal del número de máquina no puede representar bien el valor real. Por ejemplo, el bit 1 más alto del número con signo anterior 1111 1101 representa un número negativo y su valor real es
-3, no el valor formal 253 (1111
1101 es convertido a un entero decimal sin signo el tiempo es igual a 253). Por lo tanto, en aras de la distinción, el valor de verdad correspondiente al código de máquina con el bit de signo se denomina valor de verdad del código de máquina.
Por ejemplo: el valor verdadero de 0000 0001 = +000 0001 = +1, el valor verdadero de 1000 0001 = -0111 1111 = -127 aquí, por ejemplo, el código binario de -3; 10000011, que es nuestra computadora. El código fuente está representado por -3. El siguiente es el código fuente
Primero, déjame explicarte
En las computadoras, hay tres formas de representar números con signo: número original, número inverso y número complementario.
3. Código original
El código original es el valor absoluto del bit de signo más el valor verdadero, es decir, el primer bit representa el símbolo y los bits restantes representan el valor. . 127]
El código fuente es la representación más fácil de entender y calcular para el cerebro humano.
4. Código inverso
Representación de código inverso: el código inverso de un número positivo es el mismo que su código original; el código inverso de un número negativo es el bit a-; representación de bits del código original excepto el bit de signo Código inverso.
[+1] = [ 00000001 ] Código original = [ 00000001 ] Código inverso;
[-1] = ?[10000001 ] = [ 11111110 ]; p> Tenga en cuenta que si el código inverso representa un número negativo, el cerebro humano no puede ver intuitivamente su valor. Por lo general, esto debe convertirse a código sin formato y luego calcularse.
¿Qué es el complemento a dos?
Nota: El complemento de un número positivo es lo mismo que el complemento de un número negativo. El bit de signo del complemento de un número negativo es 1, es decir, el bit de signo y el bit de valor. y luego agregue 1
Referencia del código del complemento El concepto de moldura es un poco oscuro y difícil de entender. Puedes saltarte el concepto de módulo
La unidad de medida se llama módulo o módulo. Por ejemplo, un reloj cuenta períodos en base 12, que es módulo 12.
En un reloj, la posición de la manecilla de la hora permanece sin cambios cuando la manecilla de la hora se suma a los dígitos enteros de 12 (marcación positiva) o se resta de los dígitos enteros de 12 (marcación negativa). . Marque 10 espacios en el sentido contrario a las agujas del reloj desde las 0 en punto, es decir, reste 10 horas. También se puede considerar que marca 2 espacios en el sentido de las agujas del reloj desde las 0 en punto (sumar 2 horas), es decir, las 2 en punto (0-10 =). -10 = -10 + 12 = 2). Entonces, en el módulo 12, -10 se puede asignar a +2. Se puede ver que para el sistema cíclico módulo 12, el efecto de sumar 2 y restar 10 es el mismo, por lo tanto, en el sistema módulo 12, cualquier operación de restar 10 se puede reemplazar sumando 2, lo que convierte el problema de resta en; Se elimina el problema de la suma (Nota: solo hay sumadores en la estructura del hardware de la computadora, por lo que para el módulo 12, la mayoría de 10 y 2 son complementarios. De manera similar, los componentes y registros aritméticos de la computadora tienen ciertas restricciones de longitud de palabras (suponiendo que la longitud de la palabra sea 16 ), por lo que su operación también es una operación de módulo. Cuando el recuento de 16 bits del contador llega a 65536, se desbordará y contará desde el principio. La cantidad de desbordamiento es el módulo del contador, obviamente, el módulo de 16 bits. El número binario de bits es 2 ^ 16 = 65536. En los cálculos, dos números complementarios se denominan "complementos". Por ejemplo, 2 y 254 en 255 son números complementarios.
Encontrar el número positivo correspondiente al complemento es un método de conversión de números que se realiza en dos pasos:
El primer paso es tomar el valor opuesto de cada número binario, es decir , obtenemos el complemento a uno; 0 se convierte en 1, 1 se convierte en 0. Por ejemplo, el complemento de 00001000 es 11110111.
El segundo paso es sumar 1 al complemento del paso anterior, así 11110111 se convierte en 11111000. Por lo tanto, el complemento a dos de 00001000 es 11111000, lo que significa que -8 está representado por 11111000 en computadoras (máquinas de 8 bits).
No sé qué piensas, de todos modos, creo que esto es muy extraño... ¿Por qué usar un método tan problemático para representar números negativos? ¿No sería mejor un método más intuitivo?
Ventajas del código complemento a dos
En primer lugar hay que tener claro. No importa cómo la computadora represente internamente los números negativos. Los números negativos se pueden representar de cualquier forma siempre que se mantenga una correspondencia uno a uno. Entonces, dado que puedes elegir cualquier método, debes elegir uno que sea intuitivo y fácil de usar.
El complemento a dos es la forma más conveniente. Es conveniente porque todas las operaciones de suma se pueden realizar utilizando el mismo circuito.
Todavía tomando -8 como ejemplo. Supongamos que hay dos representaciones. ¿Qué representación es más conveniente para la operación de suma? Escribe una ecuación aleatoria, 16
+ (-8) = ? La representación binaria de 16 es 00010000, por lo que usando la representación visual, la operación de suma se escribiría como:
00010000
+ El formato de código original de 10001000 -8
- -------
10011000
Como puedes ver, si sigues las reglas normales de la suma, el resultado será 10011000, que convertido a decimal ser -24. Obviamente, esta es la respuesta incorrecta. Es decir, en este caso, las reglas normales de suma no se aplican a la suma de números positivos y negativos, por lo que se deben formular dos conjuntos de reglas, una para la suma de números positivos y números positivos, y otra para la Suma de números positivos y negativos. Suma de números negativos. En términos de circuitos, esto significa que se deben realizar dos circuitos para la operación de suma. Entonces, usar el código original para manejar números negativos no funcionará.
Ahora, echemos un vistazo a la representación binaria complementaria.
00010000
La forma complementaria de +11111000 es -8
------ ---
100001000 p>
100001000
p>
Como puedes ver, siguiendo las reglas normales de la suma, el resultado es 100001000. Tenga en cuenta que este es un número binario de 9 bits. Suponemos que se trata de una máquina de 8 bits, por lo que el noveno bit más alto es el bit de desbordamiento y se redondea automáticamente. Por lo tanto, el resultado es 00001000, que convertido a decimal es exactamente 8, que es la respuesta correcta 16 + (-8). Esto muestra que la representación en complemento a 2 puede extender las reglas de suma al conjunto completo de números enteros, de modo que la suma de todos los números enteros se puede realizar con un solo conjunto de circuitos.
Las propiedades del complemento a dos, se utiliza principalmente para representar números enteros negativos.
Antes de responder a la pregunta de por qué el complemento a dos puede implementar correctamente operaciones de suma, primero comprendamos la naturaleza del complemento a dos. de operaciones de código, es decir, cómo se genera el método de conversión de estos dos pasos de búsqueda complementarios. A continuación se explica cómo encontrar el número negativo correspondiente a un número positivo en una expresión informática. Por ejemplo, el número positivo 128 es 10000000, pero sorprendentemente -128 también es 10000000. Sin embargo, debido a las limitaciones del tipo de datos, el mismo 1 en el octavo bit tiene significados diferentes. El primer 1 es el bit numérico y el siguiente 1 es el bit de signo.
Para convertir un número positivo en su contraparte negativa, en realidad simplemente restas el número de 0, por ejemplo, -8 es en realidad 0-8.
Usando el concepto de módulo, se puede explicar mediante la siguiente figura:
Se sabe que el valor binario de 8 es 00001000, y -8 se puede calcular usando la siguiente ecuación:
0000000000
p>-00001000
- --------- - - -
Porque 00000000 (minuendo) es menor que 000000100 (minuendo), no basta con reducir. Pensemos en la aritmética de la escuela primaria. Si un determinado dígito del minuendo es más pequeño que el minuendo, ¿qué debemos hacer? Es simple, simplemente toma prestado 1 del dígito anterior.
Entonces, 0000000 también requiere tomar prestado 1 del dígito anterior. Es decir, el minuendo es en realidad 100000000. Este es el punto que se reescribe como:
100000000 <. /p >
-00001000
- --------- - -
11111000
Una observación adicional encontró que se puede dividir en 100000000 =11111111+1, por lo que la ecuación anterior se puede dividir en dos:
11111111
-00001000
- -------< / p>
11110111 reverso
+00000001 más uno
---------
11111000
Estos son los dos pasos de conversión del complemento a dos.
Por ejemplo, si el origen es el complemento de -128, primero use binario para representar el entero positivo 128 10000000 y encuentre el complemento de -128
1 1 1 1 1 1 1 1 1 ?
-1 0 0 0 0 0 0 0 0 0 0 0 0 0
-------- -
0 1 1 1 1 1 1 1 1 1
+0 0 0 0 0 0 0 0 0 0 1
------ ---
1 0 0 0 0 0 0 0 0 0 0 0
Es decir, el complemento de -128 es 10.000.000. El número más pequeño representado por una estructura de 8 bits es -128;
Por lo tanto, podemos resumir el paradigma de encontrar el complemento de la siguiente manera:
Encontrar el complemento de n bits sistema del número positivo A:
01101101. .........11101100 (binario de n bits), cómo encontrar su complemento, usando n-bits 1111111111111111111.... .111 (n-bit)
- 11101101101.. .. ...11101100 (binario de n bits) + 1 = ¡El complemento A servirá! Pero
Si un 11111111111111....111111 (el complemento de un entero positivo en el que todos los n bits son 1), utilice 1111111111..........11111 (n+1 bits ) - 1111111111...1111111111 (un entero positivo con n bits todos iguales a 1) + 1 para obtener su complemento.
Por ejemplo, uint16 A = 200, uint16 B = 65535, luego C = A-B
El complemento de 65535: el número positivo 65535 es 1111 1111 1111 1111 1111. Calcula B a continuación El complemento es -B; en primer lugar, se explica que hay un bit de signo del complemento, es decir, el complemento tiene un bit máximo de 1;
1 1111 1111 1111 1111 1111 - 1111 1111 1111 1111 1111 ?+1 =1 0000 0000 0000 0001, lo que equivale a que el minuendo sea 10 0000 0000 0000 0000 (18 bits) = 1 1111 1111 1111 1111 1111 1111 + 1
Porque A y B son números sin signo de 16 bits, por lo que 65535 El complemento de 65535 tiene el bit más alto redondeado, lo que equivale a que el minuendo sea 1 0000 0000
Porque A y B son números sin signo de 16 bits números, el complemento de 65535 tiene el bit más alto redondeado.
0000 0000 =1111 1111 1111 1111
+1, es decir, se puede utilizar el método de forma normal anterior, pero de esta manera -B no refleja el bit de signo de su número negativo; por supuesto, esto se debe a que excede. Se descartan todas las operaciones de 16 bits. Es decir -B = 1; es decir A - B =
201 = 201. De hecho, A - B también se puede explicar mediante el concepto de módulo; como se muestra en la siguiente figura, el módulo de un número positivo
¿Por qué la suma positiva también se aplica al complemento de números binarios?
De hecho, mostraremos que X-Y o X+(-Y) se pueden hacer sumando X más el complemento a 2 de Y (-Y).
El complemento a dos de Y es igual a (11111111-Y) + 1. Por lo tanto, el complemento a 2 de X más Y es igual a: X + (11111111-Y) + 1 asumiremos que el resultado de esta ecuación es igual a Z, es decir, Z =;
La siguiente discusión se divide en dos situaciones.
En el primer caso, si X es menor que Y, entonces Z es negativo. En este momento utilizamos la operación inversa del complemento de Z, es decir, realizamos la operación del complemento para encontrar el valor absoluto de su número positivo correspondiente, siempre que haya un signo negativo delante. Por lo tanto,
Z = -[11111111-Z+1] = -[11111111-(X + (11111111-Y) + 1)+1)] = X -
Y ; Aquí, si X Y Z no tiene signo y X < Y, entonces Z es, en última instancia, el valor absoluto de la distancia |X-Y|, porque solo se necesitan dos sumas de 255 a 1. No me preguntes por qué, aquí se utiliza el concepto de módulo anterior.
En el segundo caso, si ¿Ir al equivalente de la resta? Entonces resta 100000000. Entonces
Z = Z - 100000000 = X + (11111111-Y) + 1 - 100000000 = X - Y
Esto demuestra que bajo reglas normales de suma, se puede usar 2 Los dos El código complementario produce el resultado correcto para sumar números positivos y negativos. En otras palabras, la computadora solo necesita implementar circuitos de suma y complemento para completar la suma de todos los números enteros.