¿Cómo se almacenan los números negativos en la memoria?

Requisito previo: conversiones de base , complemento de 1 y 2 de un número binario , complemento de 2 de una string binaria
Supongamos el siguiente fragmento de código, int a = -34; Ahora, ¿cómo se almacenará esto en la memoria? Así que aquí está la teoría completa. Cada vez que se encuentra un número con signo menos, el número (ignorando el signo menos) se convierte a su equivalente binario. Luego se calcula el complemento a dos del número. Ese complemento a dos se mantiene en el lugar asignado en la memoria y el bit de signo se establecerá en 1 porque el binario que se mantiene es un número negativo. Siempre que se acceda a ese valor, primero se verificará el bit de signo si el bit de signo es 1, luego el binario se complementará a dos y se convertirá a un número decimal equivalente y se representará con un signo menos.

Tomemos un ejemplo:
Ejemplo –
int a = -2056;
Se calculará el binario de 2056 que es:

00000000000000000000100000001000 (representación de 32 bits, según el almacenamiento de int en C)
El complemento a 2 del binario anterior es:
111111111111111111111011111111000.

Entonces, finalmente, el binario anterior se almacenará en la memoria asignada para la variable a.
Cuando se trata de acceder al valor de la variable a, el binario anterior se recuperará de la ubicación de la memoria, luego se verificará su bit de signo, que es el bit más a la izquierda, ya que es 1, por lo que el número binario es un número negativo, por lo que se complementará a 2 y cuando se complemente a 2 se obtendrá el binario de 2056 que es:
00000000000000000000100000001000

El número binario anterior se convertirá a su equivalente decimal, que es 2056 y como el bit de signo era 1, el número decimal que se obtiene del número binario se representará con un signo menos. En nuestro caso -2056.

Publicación traducida automáticamente

Artículo escrito por MohitPandey1 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *