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 respuestasAsí 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é ...