Título: Modificar valor Publicado por: Choke1 en 6 Marzo 2015, 17:28 pm 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 Título: Re: Modificar valor Publicado por: ivancea96 en 6 Marzo 2015, 17:35 pm Esa estructura TreintaydosBits principalmente solo tiene 2 bits eh?
No entendí muy bien. Inicializaste n? Título: Re: Modificar valor Publicado por: Choke1 en 6 Marzo 2015, 17:38 pm si si era por no pegar los 32.
Si hago lo siguiente: // Todos los bits del pixel los ponemos a cero pixel.n = 0; Título: Re: Modificar valor Publicado por: ivancea96 en 6 Marzo 2015, 17:46 pm No entiendo. Si n está inicializado a 0, hacer "pixel.b.bit2 = 0;" no hará nada.
Título: Re: Modificar valor Publicado por: Choke1 en 6 Marzo 2015, 17:54 pm 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 Título: Re: Modificar valor Publicado por: ivancea96 en 6 Marzo 2015, 17:55 pm Código
Título: Re: Modificar valor Publicado por: Choke1 en 6 Marzo 2015, 17:58 pm Eso hice y me pone 256 a todos los bits
Título: Re: Modificar valor Publicado por: ivancea96 en 6 Marzo 2015, 18:00 pm Código
Eso es correcto. Título: Re: Modificar valor Publicado por: Choke1 en 6 Marzo 2015, 18:04 pm Me imprime 8
Título: Re: Modificar valor Publicado por: ivancea96 en 6 Marzo 2015, 18:06 pm El código que posteé ahí ha de imprimir 4. Imprime 8 si empiezas a numerar los bits desde 0.
Título: Re: Modificar valor Publicado por: Choke1 en 6 Marzo 2015, 18:09 pm gracias por la ayuda y la paciencia.
Mira esto quiero que me saga: Todos los bits del pixel puestos a 0 +----------------+----------------+----------------+----------------+ | ALFA | ROJO | VERDE | AZUL | +----------------+----------------+----------------+----------------+ | 0 0 0 0 0 0 0 0| 0 0 0 0 0 0 0 0| 0 0 0 0 0 0 0 0| 0 0 0 0 0 0 0 0| Poner a 1 el bit menos significativo del canal Alfa (bit 24) +----------------+----------------+----------------+----------------+ | ALFA | ROJO | VERDE | AZUL | +----------------+----------------+----------------+----------------+ | 0 0 0 0 0 0 0 1| 0 0 0 0 0 0 0 0| 0 0 0 0 0 0 0 0| 0 0 0 0 0 0 0 0| poner solo el bit8 a con valor 1 Título: Re: Modificar valor Publicado por: ivancea96 en 6 Marzo 2015, 18:14 pm Pues b.bit7.
En cualquier caso, no te recomendaría usar esa union. Si quieres poner a 1 un bit, basta hacer: Código
En ese ejemplo, si num es un char, 8 bits, le pondría el primer bit a 1. Aplica operaciones binarias a nivel de bit: AND &, OR |, XOR ^. Título: Re: Modificar valor Publicado por: Choke1 en 6 Marzo 2015, 18:35 pm Nada sigo sin conseguirlo XD, me obligan a usar esa union.
Título: Re: Modificar valor Publicado por: ivancea96 en 6 Marzo 2015, 18:38 pm Pon el fragmento de código, entre las etiquetas GeSHi, para que lo vea.
Título: Re: Modificar valor Publicado por: Choke1 en 6 Marzo 2015, 18:42 pm Código
Título: Re: Modificar valor Publicado por: ivancea96 en 6 Marzo 2015, 18:48 pm En el printf de la función estás imprimiendo el número entero.
Código
Así imprimes solo cada bit. Título: Re: Modificar valor Publicado por: Choke1 en 6 Marzo 2015, 18:51 pm Muchas Gracias!! Te has ganado el cielo jeje ;-)
Título: Re: Modificar valor Publicado por: Choke1 en 6 Marzo 2015, 18:59 pm Y si xj quiero cambiar 8 tengo que cambiarlo de uno a uno, xj asi:
pixel.b.bit8 = 1; pixel.b.bit9 = 1; pixel.b.bit10 = 1; pixel.b.bit11 = 1; ... O existe alguna manera menos chapuzera? Título: Re: Modificar valor Publicado por: ivancea96 en 6 Marzo 2015, 19:13 pm La forma correcta sería la que puse antes, con operadores binarios. Pero decías que no te dejaban :o
Título: Re: Modificar valor Publicado por: Choke1 en 7 Marzo 2015, 10:54 am Por cierto que significa la condicion esa: if(nump&(1<<i))
Título: Re: Publicado por: ivancea96 en 7 Marzo 2015, 12:04 pm 1 << 5 = 100000
Es un corrimiento de bits. 1<<i corre 1, i veces. Es para poder coger solo el bit i. Título: Re: Modificar valor Publicado por: Choke1 en 7 Marzo 2015, 12:21 pm A ok Gracias !!
|