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.

Respuestas a la pregunta(3)

Su respuesta a la pregunta