Memoria en campos de bits

Iniciado por Shon, 31 Julio 2010, 18:00 PM

0 Miembros y 1 Visitante están viendo este tema.

Shon

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

Komodo

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



Shon

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

do-while

¡Buenas!

Aqui 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!
- Doctor, confundo los números y los colores.
- Vaya marrón.
- ¿Marrón? ¡Por el culo te la hinco!