Red de conocimiento informático - Computadora portátil - ¿Cómo representa el código original de -2147483648?

¿Cómo representa el código original de -2147483648?

Lee lo siguiente, espero que te sea de ayuda

Código original: Convierte un número entero a binario, que es su código original. Por ejemplo, el código original de un solo byte 5 es: 0000 0101; el código original de -5 es 1000 0101.

Complemento a uno: El complemento a uno de un número positivo es su código original; el complemento a uno de un número negativo es la inversión de cada bit en el código original excepto el bit de signo. Por ejemplo, el código de complemento de un solo byte 5 es: 0000 0101; el código original de -5 es 1111 1010.

Código complemento: El código complemento de un número positivo es su código original; el código complemento de un número negativo, 1, es el código complemento. Por ejemplo, el código complemento de 5 en un solo byte es: 0000 0101; el código original de -5 es 1111 1011.

En la computadora, los números positivos están representados directamente por el código original. Por ejemplo, un solo byte de 5 se representa en la computadora como: 0000 0101. Los números negativos están representados por el complemento a dos, como un solo byte -5, que se representa como 1111 1011 en la computadora.

Aquí surge una pregunta, ¿por qué los números negativos se expresan en complemento a dos en las computadoras? ¿Por qué no expresarlo directamente en el código original? Como un solo byte -5: 1000 0101.

Quiero considerarlo desde la perspectiva del software, por dos razones:

1. Rango de representación

Tome como ejemplo números enteros de un solo byte, sin signo. y El rango de representación es que el total *** representa 256 datos. Tipo firmado, su rango de representación es.

Mirando primero sin signo, 0 se representa como 0000 0000, 255 se representa como 1111 1111, que cumple con los requisitos y puede representar 256 datos.

Mirando los firmados, si se expresa en el código original, 0 se representa como 0000 000. Como tenemos signo, también debería haber un cero negativo (aunque sigue siendo 0): 1000 0000.

Entonces veamos si esto aún puede cumplir con nuestros requisitos y representar 256 datos.

Números positivos, no hay problema, 127 es 0111 1111, 1 es 0000 0001, por supuesto no debería haber problema con otros números.

En cuanto a los números negativos, -1 es 1000 0001. Si eliminas el signo negativo, el número más grande es 111 1111, que es 127, por lo que el dato más pequeño que se puede expresar en un número negativo es - 127.

Esto no parece correcto. ¿Cómo debo expresar -128? Parece que no se puede expresar directamente usando el código original, pero tenemos dos ceros.

¿Qué pasa si especificamos uno de los 0 como -128? Esta también es una idea, pero hay dos problemas: primero, el intervalo entre él y -127 es demasiado grande, segundo, es inconveniente cuando se usa hardware para realizar cálculos;

Así, en los ordenadores, los números negativos se representan mediante códigos en complemento a dos. Por ejemplo, el byte único -1, el código original es 1000 0001, el código complementario es 1111 1110 y el código complementario es 1111 1111. El byte único -1 en la computadora se expresa como 1111 1111.

Byte único -127, el código original es 1111 1111, el código inverso es 1000 0000, el complemento es 1000 0001, el byte único -127 se expresa como 1000 0001 en la computadora.

Byte único -128, el código original parece no poder expresarlo. Excepto por el símbolo, el número más grande solo puede ser 127, que se expresa en la computadora como 1000 0000.

2. Hábitos de tamaño (opinión personal)

También se puede entender por el tamaño de los datos. Tomemos como ejemplo datos de un solo byte. Entre los números con signo, el rango de números positivos es, el mayor es 127, independientemente del signo, se expresa como 111 1111 el más pequeño es 1, independientemente del signo, se expresa como 000 0001;

De entre los números negativos, el mayor es -1, por lo que usamos 111 1111 para representar su parte numérica. Los datos siguientes se reducen en 1 en secuencia. Cuando lo reducimos a 000 0001, lo usamos para marcar -127. Resta 1 más y queda 000 0000. Afortunadamente tenemos el signo as, por lo que hay dos ceros.

Tome el 0 con signo y represente -128, que justo cumple con el rango de representación.

Lo anterior solo se analiza desde la perspectiva del software. Por supuesto, desde la perspectiva del hardware, hay razones por las que los números negativos se representan mediante códigos de complemento. Después de todo, en las computadoras, es el hardware el que. finalmente implementa los cálculos. Hay tres razones principales:

1. La conversión entre el complemento de un número negativo y su correspondiente complemento de un número positivo se puede realizar utilizando el mismo método: se completa la operación del complemento, simplificando el hardware. Por ejemplo:

Complemento de código original

-127 -〉127 1000 0001 -〉 0111 1110 -〉 0111 1111

127 -〉-127 0111 1111 - 〉 1000 0000 -〉 1000 0001

-128 -〉128 1000 0000 -〉 0111 1111 -〉 1000 0000

128 -〉-128 1000 0000 -〉 0111 1111 - 〉1000 0000

Se puede encontrar que los métodos para complementar números negativos y positivos son los mismos.

2. La resta se puede convertir en suma, eliminando la necesidad de un restador.

En informática podemos ver que al complementarlo, el resultado es el número negativo correspondiente a su valor. Lo mismo ocurre con los números negativos.

En operaciones, restar un número equivale a sumar su número opuesto. Esto se ha aprendido en la escuela primaria. Como su complemento es su opuesto, podemos simplemente sumar su complemento.

Por ejemplo: A - 127,

Es equivalente a: A (-127),

Y como los números negativos se almacenan en forma de complemento, Eso es decir, el verdadero valor de un número negativo es su complemento. En este caso, cuando queremos restar un número, simplemente tomamos su complemento y lo sumamos, ¡y listo!

Por supuesto, esto también implica la cuestión de la conversión de tipos. Por ejemplo, el código original de un solo byte 128 es 1000 0000 y su complemento también es 1000 0000. De esta forma, si sumamos 128 o -128 a 10000000, ¿no resultará confuso? Afortunadamente, los editores de varios lenguajes de programación tienen restricciones relacionadas con la conversión de tipos.

Por ejemplo: (suponiendo que todas las constantes son de un solo byte)

1 128, la operación del valor verdadero es 0000 0001 1000 0000, si asigna el resultado a un byte único firmado Si el número es positivo, el editor le indicará que excede el rango de representación. Debido a que los dos datos en la operación no están firmados, el resultado también es 129 sin signo, y la variable de un solo byte con signo máxima que puede representar es 127.

1 - 128, la operación verdadera es 0000 0001 1000 0000, porque -128 está firmado y el resultado de la operación también está firmado, 1000 0001, que resulta ser el valor verdadero de -127 en la computadora.

3. Las operaciones de suma firmadas y sin signo se pueden completar con el mismo circuito.

La suma y resta con y sin signo en realidad están sumando sus valores verdaderos. El valor verdadero es la representación binaria de un valor numérico en la computadora. El verdadero valor de un número positivo es su código original y el verdadero valor de un número negativo es su complemento. Por lo tanto, el compilador controla los valores firmados y no firmados.