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