Bitweise Operationen zum Implementieren einer logischen Verschiebung nach rechts [duplizieren]

Diese Frage hat hier bereits eine Antwort:

Implementieren der logischen Rechtsverschiebung in C 8 answers

So versuche ich, diese Hausaufgabe zu lösen und ich habe mit diesem einen bestimmten Problem für ein paar Stunden gehaftet und kann es nicht herausfinden. Ich fühle mich so nah! Aber dann ändere ich etwas im Code und etwas anderes stimmt nicht ..

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

Was fehlt hier? Ich bekomme0x80000000 >> 31 als 0 aber sollte 1 sein - aber sonst weiß ich nicht ..

Antworten auf die Frage(2)

Ihre Antwort auf die Frage