Деление на степень двойки с использованием сдвига битов

У меня есть следующая задача:

Вычислить x / (2 ^ n) , для 0 <= n <= 30 с использованием битового сдвига.

Требование: округлить до нуля.

Примеры:

 divpwr2 (15,1) = 7
divpwr2 (-33,4) = -2

Юридические операторы: ! ~ & ^ | + << >>

Максимальное количество операторов: 15

Вот что у меня есть:

public int DivideByPowerOf2(int x, int n)
{
    //TODO: find out why DivideByPowerOf2(-33,4) = -3 instead of -2
    return x >> n;
}

DivideByPowerOf2 (15,1) = 7 в порядке.

Но ] DivideByPowerOf2 (-33,4) = -3 вместо -2. Почему?

10
задан Bill the Lizard 19 September 2012 в 16:23
поделиться