Operações bit a bit para implementar a mudança lógica para a direita [duplicado]

Esta pergunta já tem uma resposta aqui:

Implementando a mudança lógica à direita em C 8 respostas

Por isso, estou tentando resolver esta tarefa doméstica e estou preso a esse problema em particular por algumas horas e não consigo descobrir. Eu sinto que estou tão perto! Mas então eu mudo algo no código e outra coisa não está certa ..

/*
 * 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;
}

O que falta aqui? eu recebo0x80000000 >> 31 como 0, mas deve ser 1 - Mas fora isso eu não sei ..

questionAnswers(2)

yourAnswerToTheQuestion