Yo quería reemplazar bit/bits (más de 1) en un campo de datos de 32/64 bits sin afectar a otros bits.Say por ejemplo:Cómo sustituir bits en un campo de bits sin afectar a otros bits utilizando c
I tener un registro de 64 bits donde los bits 5 & 6 pueden tomar valores de 0,1,2,3.
5:6
0 0
0 1
1 0
1 1
Ahora cuando leí el registro me sale decir el valor 0x146 (0001 0 10 0 0110) .Ahora quiero cambiar el valor de la posición de bit 5 y 6 a 01. (ahora es 10, que es 2 en decimal y quiero reemplazarlo a 1 e 01) y sin otros bits obtener afectados y escribir de nuevo el registro con sólo los bits 5 & 6 modificado. (por lo que se convierten en 126 después de cambiar)
he intentado hacer esto
reg_data=0x146
reg_data |= 1 << shift (shift in this case is 5)
Si hago este valor en las posiciones de bit 5 & 6 se convertirá en 11 (0x3) no 01 (0x1) que yo quería.
- ¿Cómo hago para leer/modificar/escribir?
- ¿Cómo reemplazo solo ciertos bits/bits en un campo de 32/64 bits sin afectar los datos completos del campo usando C?
Establecer un poco está bien, pero más de un bit, me resulta un poco difícil.
Cualquier sugerencia es muy apreciada.
+1. Además, si sabes que son adyacentes, se vuelve más simple: por ejemplo, en este caso, 'reg_data = reg_data & (~ (3 << 5)) | (1 << 5) ' – Amadan