Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: Shon en 31 Julio 2010, 18:00 pm



Título: Memoria en campos de bits
Publicado por: Shon en 31 Julio 2010, 18:00 pm
Hola,

Código
  1. /*
  2.  * campos de bits
  3.  */
  4. #include <stdio.h>
  5.  
  6. struct palabra {
  7. unsigned car_ascii : 7;
  8. unsigned bit_paridad : 1;
  9. unsigned operacion : 5;
  10. unsigned : 18;
  11. unsigned bit_signo : 1;
  12. };
  13.  
  14. int main(int argc, char *argv[]) {
  15. struct palabra cb = {'C', 1, 0x1E, 0};
  16.  
  17. printf("campos de bits: %x\n\n", cb);
  18. printf("bit signo %x\n", cb.bit_signo);
  19. printf("operacion : %x\n", cb.operacion);
  20. printf("bit de paridad: %x\n", cb.bit_paridad);
  21. printf("caracter %c : %x\n", cb.car_ascii, cb.car_ascii);
  22.  
  23. return 0;
  24. }
  25.  

Alguien sabría explicarme porque este programa da este resultado:

campos de bits: 1ec3

bit signo 0
operacion : 1e
bit de paridad: 1
caracter C : 43


No me entra en la cabezota como hace las asignaciones y la ordenación en memoria


Título: Re: Memoria en campos de bits
Publicado por: Komodo en 31 Julio 2010, 18:23 pm
Haber lo primero sabes que %x saca un entero en base hexadecimal

si cogemos ese 43 (C) y lo ponemos en modo Decimal da: 67 y eso es el valor ASCII de C.

espero haberte despejado algo



Título: Re: Memoria en campos de bits
Publicado por: Shon en 31 Julio 2010, 18:45 pm
Si, eso lo sé; lo que mas me lía es la ordenación en memoria.

dir. baja  ----------------------------- dir. alta
----------------------------------------------
11000011000111100000000000000000

Así es como lo almacena en memoria y no tengo ni idea como lo hace

Un saludo


Título: Re: Memoria en campos de bits
Publicado por: do-while en 31 Julio 2010, 21:01 pm
¡Buenas!

Aqui (http://www.zator.com/Cpp/E4_6.htm) tienes informacion sobre los campos de bits. En particular el apartado 6 explica las reglas que se utilizan para alinear los campos en la memoria.

¡Saludos!