Actualizar campos de bits incorrectamente
Estoy tratando de resolver una pregunta. Dice,
Inicialice una nueva variable al valor 17512807u.
Supongamos que numeramos los bits como de costumbre desde 0 como menos significativos (a la derecha) hasta 31 (más significativos, a la izquierda). Actualice los bits 18 a 21 con el valor entero 8 y los bits 10 a 14 con el valor 17 (decimal). Imprima el valor resultante como un número hexadecimal de ocho dígitos para mostrar todos los dígitos.
Aquí está el código que se me ocurrió:
#include <stdio.h>
int main(){
int value = 17512807u;
int L = 21; // starting left position
int R = 18; // starting right position
int mask = (1 << (L - R + 1) - 1) << R;
int newField = (8 << R) & mask; // integer value 8, shifting to right
int newValue = value & (~mask); // remove range of bits
value = newField | newValue; // update range of bits
L = 14;
R = 10;
mask = (1 << (L - R + 1) - 1) << R;
newField = (17 << R) & mask;
newValue = value & (~mask);
value = newField | newValue;
printf("%08x\n", value);
}
La respuesta que obtengo es 012b7d67
Sin embargo, me dijeron que esta es la respuesta incorrecta. No sé cuál es la respuesta correcta.