Test Foro de elhacker.net SMF 2.1

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,


/*
* campos de bits
*/
#include <stdio.h>

struct palabra {
unsigned car_ascii : 7;
unsigned bit_paridad : 1;
unsigned operacion : 5;
unsigned : 18;
unsigned bit_signo : 1;
};

int main(int argc, char *argv[]) {
struct palabra cb = {'C', 1, 0x1E, 0};

printf("campos de bits: %x\n\n", cb);
printf("bit signo %x\n", cb.bit_signo);
printf("operacion : %x\n", cb.operacion);
printf("bit de paridad: %x\n", cb.bit_paridad);
printf("caracter %c : %x\n", cb.car_ascii, cb.car_ascii);

return 0;
}


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!