Salida del programa C | Conjunto 25

Prediga la salida del siguiente programa en C.

int main(void)
{
    struct str
    {
        int i: 1;
        int j: 2;
        int k: 3;
        int l: 4;
    };
  
    struct str s;
  
    s.i = 1;
    s.j = 2;
    s.k = 5;
    s.l = 10;
  
    printf(" i: %d \n j: %d \n k: %d \n l: %d \n", s.i, s.j, s.k, s.l);
  
    getchar();
    return 0;
}

El código anterior no es portátil y la salida depende del compilador. Obtenemos el siguiente resultado usando el compilador GCC para una máquina Intel de 32 bits.

  [narendra@ubuntu]$ ./structure
  i: -1
  j: -2
  k: -3
  l: -6

Echemos un vistazo más de cerca a la declaración de estructura.

struct str
{
    int i: 1;
    int j: 2;
    int k: 3;
    int l: 4;
};

En la declaración de estructura, para el miembro de estructura ‘i’, usamos el ancho del campo de bits como 1, el ancho de ‘j’ como 2, y así sucesivamente. Al principio, parece que podemos almacenar valores en el rango [0-1] para ‘i’, rango [0-3] para ‘j’, y así sucesivamente. Pero en la declaración anterior, el tipo de campo de bits es entero ( con signo ). Es por eso que de los bits disponibles, 1 bit se usa para almacenar información de signos. Entonces, para ‘i’, los valores que podemos almacenar son 0 o -1 (para una máquina que usa complemento a dos para almacenar enteros con signo). Para la variable ‘k’, el número de bits es 3. De estos 3 bits, 2 bits se usan para almacenar datos y 1 bit se usa para almacenar signos.

Deje que declare los miembros de la estructura como «int sin firmar» y verifique la salida.

int main(void)
{
    struct str
    {
        unsigned int i: 1;
        unsigned int j: 2;
        unsigned int k: 3;
        unsigned int l: 4;
    };
    struct str s;
  
    s.i = 1;
    s.j = 2;
    s.k = 5;
    s.l = 10;
  
    printf(" i: %d \n j: %d \n k: %d \n l: %d \n", s.i, s.j, s.k, s.l);
  
    getchar();
    return 0;
}

producción:

  [narendra@ubuntu]$ ./structure
  i: 1
  j: 2
  k: 5
  l: 10

Este artículo fue compilado por «Narendra Kangralkar» y revisado por el equipo de GeeksforGeeks. Escriba comentarios si encuentra algo incorrecto o si desea compartir más información sobre el tema tratado anteriormente.

Publicación traducida automáticamente

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