Избыточное двоичное представление - это просто выражение вида:
\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 включает больше опций, вам необходимо соответствующим образом откорректировать коэффициент помадки.