Modificar valor

Iniciado por Choke1, 6 Marzo 2015, 17:28 PM

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

Choke1

Tengo esta estructura y esta union:

typedef struct TreintaydosBits {
    unsigned bit0 : 1;
    unsigned bit1 : 1;
    unsigned bit2 : 1;} TreintaydosBits;

typedef union CuatroBytes {
    long n;
    TreintaydosBits b;
} CuatroBytes;

y quiero cambiar a 0 el bit2.

He declarado lo siguiente:
CuatroBytes pixel;
Y pensaba que haciendo esto se me cambiaba
    pixel.b.bit2 = 0;

Pero no ya que al imprimir me sale 256 256 256

¿Sabeis como se hace bn?

saluds




ivancea96

Esa estructura TreintaydosBits principalmente solo tiene 2 bits eh?

No entendí muy bien. Inicializaste n?

Choke1

si si era por no pegar los 32.

Si hago lo siguiente:

// Todos los bits del pixel los ponemos a cero
    pixel.n = 0;

ivancea96

No entiendo. Si n está inicializado a 0, hacer "pixel.b.bit2 = 0;" no hará nada.

Choke1

La cosa es cambiar solo el valor de uno

pixel.n = 0; se ponen todos a 0

si solo solo quiero uno pensaba que se podia hacer asi pixel.b.bit2 = 0; pero no

ivancea96


Choke1

Eso hice y me pone 256 a todos los bits

ivancea96

#include <stdio.h>

typedef struct TreintaydosBits {
    unsigned bit1 : 1;
    unsigned bit2 : 1;
    unsigned bit3 : 1;
    unsigned bit4 : 1;
    unsigned bit5 : 1;
    unsigned bit6 : 1;
    unsigned bit7 : 1;
    unsigned bit8 : 1;
    unsigned bit9 : 1;
    unsigned bit10: 1;
    unsigned bit11: 1;
    unsigned bit12: 1;
    unsigned bit13: 1;
    unsigned bit14: 1;
    unsigned bit15: 1;
    unsigned bit16: 1;
} TreintaydosBits;

typedef union CuatroBytes {
    short n;
    TreintaydosBits b;
} CuatroBytes;

int main(){
    CuatroBytes cb;
    cb.n=0;
    cb.b.bit3 = 1;
    printf("%d",cb.n);
}


Eso es correcto.

Choke1


ivancea96

El código que posteé ahí ha de imprimir 4. Imprime 8 si empiezas a numerar los bits desde 0.