Цитата(RHnd @ Nov 20 2007, 20:26)

Итак, есть число, знаковое. Его надо разделить
Вариант 1: на степень двойки. Сдвигаем вправо и все. Округление, на сколько я знаю, до ближайшего целого в сторону минус бесконечности.
Вариант 2: не на степень двойки, а, скажем, на 1.6. Деление на 1.6 выполняем следующим образом:
1/1.6 = 0.625 = (1/2+1/8). Т.е. сдвигаем на один бит и прибавляем результат сдвига на 3 бита. Какое округление происходит в данном случае я даже не знаю.
Думаю, все будет гораздо наглядней и понятней, если изменить последовательность операций.
Вариант 1.
(А >> n) + 0.5 == (A+2**(n-1)) >> n
Вариант 2.
A/2 + A/8 + 0.5 == (A >> 1) + (A >> 3) + 0.5 == ((A << 2) + A + (0.5 << 3)) >> 3 ==
((A << 2) + A + (1 << 2)) >> 3
Иными словами: вначале прибавить 2**(n-1), а затем смело отбросить n разраядов.