Uso de registros a nivel de byte

Foro para hablantes de español que deseen escribir en su lengua materna.

Moderator: Benj

Fer_taca
Posts: 49
Joined: Fri Oct 27, 2017 9:50 am
Has thanked: 9 times
Been thanked: 7 times
Contact:

Uso de registros a nivel de byte

Postby Fer_taca » Thu Jun 13, 2019 9:35 pm

Hola Amigos,
me encuentro in una nueva duda que se trata de como manejar a nivel de bits los datos de un registro. Me explico:
Tengo 3 variables tipo bit: var1, var2 y var3. Me gustaría empaquetarlas dentro de un registro llamado estado_variable.
Y de esa forma podría consultar su valor de manera individual a la vez que cada vez que cambie el estado de alguna de ellas poderla guardar de forma también individual.

¿Para guardarlos se puede hacerse de forma que se guarde el valor del primero, se rote hacia la izquierda el bit, se guarde el segundo, se vuelva a rotar y después se guarde el tercero? ¿Se puede guardar directamente, por ejemplo, solo el tercer bit es su lugar correspondiente?

Muchas gracias de antemano

User avatar
Benj
Matrix Staff
Posts: 13980
Joined: Mon Oct 16, 2006 10:48 am
Location: Matrix TS Ltd
Has thanked: 4244 times
Been thanked: 4006 times
Contact:

Re: Uso de registros a nivel de byte

Postby Benj » Mon Jun 17, 2019 5:31 pm

Hola,

Sí, esto es posible. Digamos que tenemos una variable de byte que queremos poder leer y escribir 8 bits individuales.

Para establecer el bit usaríamos un código como este, bit es un valor entre 0 y 7, es decir, la posición del bit.

Reg = Reg | (1 << bit)

Para borrar el bit usaríamos este código.

Reg = Reg & ~ (1 << bit)

Para leer el bit usaríamos esta nota de código, usaremos el valor del bit dos veces, una vez para cambiar a la posición del bit y otra vez para bajar para tener un valor 0 o 1.

Valor = (Reg & (1 << bit)) >> bit




Hello,

Yes this is possible. Let's say we have a byte variable that we want to be able to read and write 8 individual bits.

To set the bit we would use code like this, bit is a value between 0 and 7 i.e. the bit position.

Reg = Reg | (1 << bit)

To clear the bit we would use this code.

Reg = Reg & ~(1 << bit)

To read the bit we would use this code note we use the bit value twice, once to shift up to the bit position and again to shift down to have a value 0 or 1.

Value = (Reg & (1 << bit)) >> bit

Fer_taca
Posts: 49
Joined: Fri Oct 27, 2017 9:50 am
Has thanked: 9 times
Been thanked: 7 times
Contact:

Re: Uso de registros a nivel de byte

Postby Fer_taca » Mon Jun 17, 2019 8:26 pm

Muchas gracias por la respuesta Benj.
Voy a tratar de asimilar lo que me has indicado e intentar comprenderlo

Saludos
F.
These users thanked the author Fer_taca for the post:
Benj (Tue Jun 18, 2019 9:49 am)
Rating: 5.88%