деление на 2 в двоичной знаковой цифре (избыточное двоичное представление) - PullRequest
0 голосов
/ 06 мая 2010

Как я могу сделать деление на 2 в двоичной цифре со знаком (избыточное двоичное представление)? Сдвиг не сработает, верно?

1 Ответ

0 голосов
/ 07 мая 2010

Избыточное двоичное представление - это просто выражение вида:

\sum_{i=0}^n d_i 2^n

, где d_i взяты из большего набора, чем просто {0,1}.

Деление на два или сдвиг вправо приводит к

\sum_{i=0}^{n-1} d_{i+1} 2^n + f(d_0)

Хитрость заключается в том, как справиться с настройкой избыточного представления для d_0.

Если в вашем RBR есть цифры формы {0,1,2} и 2 для наименее значащей цифры, вам нужно будет добавить 1 к результату для компенсации, поэтому f(0) = 0, f(1) = 0, f(2) = 1 работа.

  • 4 = 12_base2, поэтому 12_base2 >> 1 = 1 + f(2) = 1 + 1 = 2_base2 = 2, как и ожидалось.
  • 6 = 102_base2, поэтому 102_base2 >> 1 = 10_base2 + f(2) = 11_base2 = 3

Вы можете получить нечто подобное для подписанных избыточных двоичных представлений (т.е. с d_i в {-1,0,1}), установив f(-1) = -1.

  • 1 = 1(-1)_base2, поэтому 1(-1)_base2 >> 1 = 1 + f(-1) = 1 - 1 = 0

Так что в конечном итоге наивный подход к простому сдвигу работает, вам просто необходим коэффициент выдумки для учета любого избыточного кодирования сдвинутых цифр.

Если выбранный вами RBR включает больше опций, вам необходимо соответствующим образом откорректировать коэффициент помадки.

...