У меня есть следующая задача:
Вычислить
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. Почему?