Entendiendo Typecasting como un compilador

Comencemos nuestra discusión con unas pocas líneas de C

C

#include <stdio.h>
  
int main() {
  
    int x = 97;
    char ch = x;
    printf("The value of %d in character form is '%c'",x, ch);
    return 0;
}

Producción : 

The value of 97 in character form is 'a'

Entendamos cómo el compilador va a compilar cada instrucción en este programa.

compilador:

  1. Entra en el programa principal
  2. Asignó 4 bytes de memoria (como un entero generalmente toma 4 bytes), lo nombró como x y le da un valor de 97
  3. Asignó 1 byte de memoria (ya que un carácter ocupa 1 byte de espacio), lo nombró como ch y almacenó el valor correspondiente a x en él
  4. Impreso el valor de ch
  5. Sale del programa principal

Comprenderemos los puntos 2 y 3 a fondo, ya que todos los demás son obvios.

Descripción del segundo punto:

El compilador convertirá 97 (en decimal) a su forma binaria correspondiente ya que la memoria almacena los datos en forma binaria . 00000000 00000000 00000000 01100001 es la representación binaria de 97 en representación binaria de 4 bytes (o 32 bits). Entonces, el contenido de la variable x se verá como en la imagen dada: 

Sistema Big Endian

Este sistema de representación de los datos en forma binaria en la memoria se conoce como Big Endian . Pero en la mayoría de los sistemas informáticos a pesar de este sistema, se sigue el sistema Little Endian . Entonces, en el sistema Little Endian, el contenido de x es el siguiente:

sistema Little Endian

Entonces, en la mayoría de las computadoras, todos los datos en la memoria se almacenarán solo en forma Little-Endian.

Descripción del segundo punto:

Como se dijo anteriormente, el carácter ocupa 1 byte u 8 bits de espacio en la memoria, por lo que el compilador lo asignará, pero cuando se trata de asignar el valor a la variable ch , irá a la ubicación donde x está presente y comenzará a leer el contenido. de solo el primer byte ya que está leyendo para un carácter. Entonces, el primer byte tiene 0110 0001 en forma binaria y su forma decimal correspondiente es 97. Cada carácter tiene un código ASCII asociado y el código ASCII para el carácter es 97. Es por eso que el contenido de ch se convertirá en a y después eso, el compilador simplemente imprimirá el contenido de ch.

Algunos ejemplos más para una mejor comprensión:

C

#include <stdio.h>
  
int main() {
    int x = 321;  //can be written as 256+65
    char ch = x;
    printf("The character form of %d is '%c'",x,ch);
    return 0;
}

Producción :

The character form of 321 is 'A'

Explicación :

La representación binaria de 321 es 00000000 00000000 00000001 01000001 y el contenido de x en el sistema Little Endian es 0100001 00000001 00000000 00000000 simplemente haga 1234 ⇢ 4321 (ver imagen) obtenga este formulario. Ahora el compilador solo mira el primer byte que es   0100001 y su forma decimal correspondiente es 65 que es el código ASCII para el carácter ‘a’ .

C

#include <stdio.h>
  
int main() {
  
    int x = 57; 
    char ch = x;
    printf("The character form of %d is '%c'",x,ch);
    return 0;
}

Producción :

The character form of 57 is '9'

Explicación :

La representación binaria de 57 es 00000000 00000000 00000000 00111001 y el contenido de x en el sistema Little Endian es 00111001 00000000 00000000 00000000 Ahora el compilador solo mira el primer byte que es 00111001 y su código decimal correspondiente es 57 para el cual es el carácter ‘9’.

Agradable tener :

  1. El código ASCII para AZ es 65-90, az es 97-122 y los dígitos del 0 al 9 también tienen su código ASCII correspondiente del 48 al 57.
  2. Para encontrar la forma de carácter correspondiente, simplemente encuentre el módulo de ese número con 256 y luego busque en la tabla ASCII y encuentre el carácter correspondiente al resto. Esa será tu respuesta.

GRACIAS ^_^

Publicación traducida automáticamente

Artículo escrito por abhishek005 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 *