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 respostasPor 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 ..