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