Operaciones a nivel de bit para implementar el desplazamiento lógico a la derecha [duplicado]

Esta pregunta ya tiene una respuesta aquí:

Implementación de desplazamiento lógico a la derecha en C 8 respuestas

Así que estoy tratando de resolver esta tarea y me he quedado atrapado con este problema en particular durante un par de horas y no puedo resolverlo. ¡Siento que estoy tan cerca! Pero luego cambio algo en el código y algo más no está bien ...

/*
 * logicalShift - shift x to the right by n, using a logical shift
 *   Can assume that 0 <= n <= 31
 *   Examples: logicalShift(0x87654321,4) = 0x08765432
 *   Legal ops: ! ~ & ^ | + << >>
 *   Max ops: 20
 *   Rating: 3
 */
int logicalShift(int x, int n) {

    int move;
    int y;
    y = x >> n;
    y = ~y << 1;
    move = (y & (x >> n));

    return move;
}

¿Qué falta aquí? yo obtengo0x80000000 >> 31 como 0 pero debería ser 1 - Pero aparte de eso no lo sé ...

Respuestas a la pregunta(2)

Su respuesta a la pregunta