Побитовые операции для реализации логического сдвига вправо [дубликат]

На этот вопрос уже есть ответ здесь:

Реализация логического правого сдвига в C 8 ответов

Поэтому я пытаюсь решить домашнее задание, и я застрял с этой конкретной проблемой в течение нескольких часов и не могу понять это. Я чувствую себя так близко! Но потом я что-то изменяю в коде, а что-то другое не так ..

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

Чего здесь не хватает? я получил0x80000000 >> 31&nbsp;как 0, но должно быть 1 - Но кроме этого я не знаю ..