Побитовые операции для реализации логического сдвига вправо [дубликат]
На этот вопрос уже есть ответ здесь:
Реализация логического правого сдвига в 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
как 0, но должно быть 1 - Но кроме этого я не знаю ..